Announcement

Collapse
No announcement yet.

SQL-Abfrage über mehrere Datenbanken und Kennzeichenlisten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL-Abfrage über mehrere Datenbanken und Kennzeichenlisten

    Hallo,

    ich könnte mal Hilfe gebrauchen. Bitte.

    Gegeben sind 2 Adressdatenbanken. Die eine ist für Personal und eine weitere für Firmen. Jede Adresse kann mit Werten aus Kennzeichenlisten versehen werden. Nun möchte ich gern eine Abfrage gererieren, welche die aktive Adresse (bekomme ich mit der ID) mit den Adressen aus der 2ten Datenbank vergleicht. Die Treffer sollen in einer Zusatztabelle gespeichert werden.

    Eigentlich klingt das so einfach, "Schreibe alle Adressen aus der 2ten Tabelle in eine Zusatztabelle, wenn die Werte der Kennzeichenliste gleich ist, mit den Werten der Kennzeichenliste von der aktiven Adresse.".

    Bei Kennzeichenfeldern habe ich kein Problem, da hier ein Wert gegeben ist.

    SELECT [T1].[NameSalutation], [T1].[NameTitle], [T1].[NameFirst], [T1].[NameLast], [T1].[Street] " & _
    "FROM " & Auftragstabelle & " AS [T1] " & _
    "JOIN tblMasterPropValues AS PV ON PV.[Id]=[T1].[Kennzeichenfeld] " & _
    "WHERE [T1].[Kennzeichenfeld] = '"& CS_oProbVal &"' " & _
    "AND [T1].[UID] <> '"& aUID &"'"

    Mein Problem besteht vielmehr bei den Kennzeichenlisten, da hier mehrere Möglichkeiten gegeben sei können, welche ich nicht kenne.

    Hat jemand einen Rat für mich oder noch besser ein Beispiel-Code??

  • #2
    Hallo,

    einer benutzerdefinierten Funktion (UDF) können Parameter übergeben werden, die intern im WHERE-Kriterium genutzt werden, um die von der UDF zurückgelieferte Ergebnismenge einzuschränken.

    Eine UDF darf auch im FROM- oder WHERE-Abschnitt einer anderen SELECT-Abfrage verwendet werden, so dass somit das Ergebnis sehr flexibel eingeschränkt werden kann.

    Comment


    • #3
      Hallo,

      um das richtig zu verstehen eine Frage:
      Du hast in der Tabelle tblMasterPropValues verschiedene Kennzeichen (oder nennen wir es mal Eigenschaften) und Du sucht nach Kriterien, Du weisst nur nicht wieviele und was, möchtest aber wenn nach 2 Eigenschaften gesucht wird, dann die genauen Treffer haben???

      Comment


      • #4
        Hallo zurück,

        zunächst Danke für Euer Interesse und für Eure Hilfe.

        Thomas, als Bsp.:
        Ich habe eine Firmenadresse xyz, die hat Kennzeichen (Eigenschaften), hier mal in der Erfahrung mit Betriebssystemen (Windows, Linux) als Anforderung. Nun soll in einer DB nach Personen gesucht werden, die diese Anforderungen erfüllen. Da die Anforderungen in einer Kennzeichenliste stehen und ich diese im Vorfeld nicht kenne, muss ich sie ja ermitteln. Das kann ich und erhalte mehrere Datensätze. Diese muss ich nun mit den anderen Datensätzen vergleichen um an die Personen zu kommen.

        Suche nach Firma mit den Kennzeichen ID.Windows und ID.Linux aus Tabelle Kennzeichen --> Suche nach Personen mit der Übereinstimmung ID.Windows und ID.Linux aus der Tabelle Kennzeichen.

        Wie gesagt, wenn nur EIN Kennzeichen vergeben wird und es in einem Feld steht habe ich keine Probleme.

        Bin jedoch dankbar über jeden Tipp, wie ich mit Kennzeichenlisten verfahren soll.

        Comment


        • #5
          Hallo!

          Ist "Kennzeichenfeld" ein varchar?
          Kann eine Adresse/Person mehrere Kennzeichen haben? Also Kennzeichenfeld = 'ID_Windows;ID_Linux;ID_Novell'

          Wenn da zwei Ja's kommen:
          Ein Überabriten der DB Struktur scheint mir sehr ratsam...

          Wenn nein:
          Sorry ich habe die Aufgabenstellung ncht begriffen.

          BYE BERND

          Comment


          • #6
            Hallo Der Booker,

            Dein Problem ist wahrscheinlich das Datenbankdesign! So wie es für mich aussieht, speicherst Du in dem FELD Kennzeichen der Tabelle "Auftragstabelle " mehr als eine Kennzeichen.ID! Und damit fangen die Schwierigkeiten schon an! Du solltest eine neue Tabelle erstellen in denen Du die "AuftragstabelleKennzeichen" speicherst. Dann sollte es einfacher werden!

            Gruß
            Thomas

            Comment


            • #7
              Hallo zurück,

              nein so ist es nicht.

              Struktur: Adresstabelle(tblAS0014); Zusatztabelle(tblAS0014_EX001); Kennzeichentabelle(tblAS0014_PS).
              Verbunden sind sie mit ID.Adresstabelle mit ID.Zusatztabelle.
              Weiterhin habe ich ID.Kennzeichenfeld mit ID.Kennzeichentabelle verbunden. Bei Kennzeichenlisten wird zwar auch ID.Kennzeichen mit ID.Kennzeichentabelle verbunden, habe jedoch dafür immer einen einzelnen Datensatz.
              Die möglichen Kennzeichen für die Kennzeichenfelder und/oder Kennzeichenliste, werden aus der MasterPropValue geholt.
              Somit wäre die Struktur stimmig.

              Ich habe also einen Adressdatensatz mit x Kennzeichen in einer Kennzeichenliste.
              X muss dabei ermittelt werden.
              Gesucht werden soll über die gesamte DB nach Adressen, die die gleiche Kombination an gesetzten Kennzeichen haben.

              Demnach habe ich (so denke ich) 2 Abfragen zu machen.
              1.) Ermittle die gesetzten Kennzeichen
              damit erhalte ich für die Adresse z.B. 3 Treffer.
              Das sieht dann so aus.
              Adresse Kennzeichen
              Firma1 2(Id.von_Windows)
              Firma1 3(Id.von_Linux)
              Firma1 7(Id.von_Novell)
              Nun habe ich also 3 Adressen. Das scheint mir falsch, denn ich möchte ja eine Adresse mit x (x = in diesem Fall 3) Kennzeichen (aus einer Liste)
              2.) Ermittle mit daraus, aus der DB, PersonenAdressen, die mind. (wobei mind. hier nicht wichtig ist) die gleichen gesetzen Kennzeichen (aus einer Liste) haben.
              Da ich immer mehrere Datensätz als Lösung bekam, gruppierte ich die einzelnen Adressen etwa so:
              SELECT dbo_tblAS0014.UID
              FROM dbo_tblAS0014_PS INNER JOIN dbo_tblAS0014 ON dbo_tblAS0014_PS.IdAddress = dbo_tblAS0014.Id
              WHERE (((dbo_tblAS0014_PS.IdAddress)=[dbo_tblAS0014]![Id]) AND ((dbo_tblAS0014_PS.IdCategory)=30) AND ((dbo_tblAS0014_PS.IdColumn)=2203))
              GROUP BY dbo_tblAS0014.UID;

              Bringt aber nix, da nun ja wieder die ermittelten Werte fehlen. Ich raffs einfach nicht.

              Comment


              • #8
                Hallo!

                create table adressen (id int)
                insert into adressen values (1)
                insert into adressen values (2)
                insert into adressen values (3)
                create table kennzeichen (id int, idkenn int)
                insert into kennzeichen values ( 1, 2 )
                insert into kennzeichen values ( 1, 3 )
                insert into kennzeichen values ( 1, 7 )
                insert into kennzeichen values ( 2, 5 )
                insert into kennzeichen values ( 3, 2 )
                insert into kennzeichen values ( 3, 3 )
                insert into kennzeichen values ( 3, 7 )

                Wenn Du jetzt nach den KennIds 2,3,7 suchst sollten die Adressen IDs 1 und 3 rauskommen oder?

                Wenn ja:
                select id from kennzeichen where idkenn in(2,3,7) group by id having count(*) = 3
                Sollte klappen. Unter der Bedingung, dass Kenn IDs pro Adresse nicht doppelt vergeben werden!

                BYE BERND

                Comment

                Working...
                X