Peter: Frage zu SQL-Query

Hallo

Ich habe ein Tabelle A:

id_A ¦ name

eine Tabelle B

id_B ¦ name

und eine Tabelle C (Welche Beziehungen zwischen A und B definiert)

id_C ¦ id_A ¦ id_B

Nun versuche ich ein Query zu machen, welches mir alle abhängigen Datensätze aus Tabelle B zurückgibt unter der Bedingung dass id_A='x' ist. (Wobei x die ID des Produkts ist, für welches ich die abhängigen Datensätze aus B erhalten möchte)

Ist das überhaupt möglich? Und wenn ja wie?

Gruss Peter

  1. Hallo Peter

    Nun versuche ich ein Query zu machen, welches mir alle abhängigen Datensätze aus Tabelle B zurückgibt unter der Bedingung dass id_A='x' ist. (Wobei x die ID des Produkts ist, für welches ich die abhängigen Datensätze aus B erhalten möchte)

    Ist das überhaupt möglich? Und wenn ja wie?

    Ja, Du solltest Dich mit JOIN befassen.

    Die Dokumentation Deines Datenbankmanagementsystems (DBMS) hat garantiert Informationen darüber, keiner hier im Forum hat hingegen Informationen darüber, auf welches DBMS sich Deine Frage bezieht :-(

    Freundliche Grüsse,

    Vinzenz

    1. Es handelt sich um MSSQL!

      Gruss

      1. Hallo Peter

        Es handelt sich um MSSQL!

        Fahnde bitte in der SQL Server-Onlinedokumentation (immer eine gute Idee, so etwas mitzuinstallieren) nach der Dokumentation zu SELECT, und dort in der FROM-Klausel.

        Alternativ kannst Du auch den SQL Query Analyzer öffnen, SELECT eingeben, markieren und F1 drücken.

        Freundliche Grüsse,

        Vinzenz

        1. OK, ich hab da was hingekriegt. Ist das nun die Lösung eines Anfängers oder ist das völlig in Ordnung?

          SELECT B.name
          FROM B
          INNER JOIN
          C ON B.id_B = C.id_B
          WHERE C.id_A = 'x'

          Gruss Daniel

          1. Hallo Peter oder Daniel ;-)

            SELECT B.name
            FROM B
            INNER JOIN
            C ON B.id_B = C.id_B
            WHERE C.id_A = 'x'

            Das ist völlig in Ordnung
            und sieht nicht nach Anfängerlösung aus :-)

            Deine Lösung setzt vernünftigerweise voraus,
            was Du am Anfang beschrieben hast, dass id_A
            Fremdschlüssel in Tabelle C ist (Primärschlüssel
            in Tabelle A) und verwendet nicht mehr Tabellen
            als notwendig.

            Den Hinweis von Ilja bezüglich des mit an
            Sicherheit grenzender Wahrscheinlichkeit
            überflüssigen Feldes C.id_C solltest Du aber
            auch beachten.

            Freundliche Grüsse,

            Vinzenz

            1. Hallo Peter oder Daniel ;-)

              Da verwechselt man doch glatt das Pseudonym ;-)

              Den Hinweis von Ilja bezüglich des mit an
              Sicherheit grenzender Wahrscheinlichkeit
              überflüssigen Feldes C.id_C solltest Du aber
              auch beachten.

              Ich hab das absichtlich gemacht, da ich Relationen einfacher hinzufügen und löschen kann. Zudem gibts noch eine Historie-Funktion

              Danke für die Tipps!
              Gruss Peter

  2. yo,

    SELECT a.name, b.name FROM a, b, c
    WHERE a.id_A=c.id_A AND b.id_B=c.id_B
    AND a.id_A=x;

    noch ein kleiner tipp: die spalte id_c ist aller wahrscheinlichkeit überflüssing, da ein zusammengesetzter schlüssel die datensätze in der tabelle c wohl auch eindeutig identifizieren.

    Ilja