SQL SELECT JOIN Abfrage mit verknüpften Tabellen



  • Hi,

    ich habe drei Tabellen, wobei die Erste eine Liste von Eigenschaften Enthält, die von den andern beiden Tabellen referenziert werden können. Also in etwa so:

    Eigenschaften:  ID | Wert
                    ---+--------------
                     1 | Eigenschaft1
                     2 | Eigenschaft2
                     3 | Eigenschaft3
                     4 | Eigenschaft4
    
    Tabelle1:  ID | Eigenschaft | Wert
               ---+-------------+-------
                1 |  1          | Wert1
                2 |  3          | Wert2
    
    Tabelle2:  ID | Eigenschaft | Wert
               ---+-------------+-------
                1 |  1          | Wert1
                2 |  4          | Wert2
    

    Soweit so gut. Jetzt möchte ich mit einer SELECT JOIN Abfrage einen Datensatz bekommen, der mir die Eigenschaften auflistet und dahinter eine Spalte für jede der Zwei Tabellen mit dem Wert passend zu der Eigenschaft (jede Eigenschaft ist in Tabelle1 und 2 nur einmal enthalten), etwa so:

    Eigenschaften:   Eigenschaft  | Tabelle1 | Tabelle2
                    --------------+----------+----------
                     Eigenschaft1 | Wert1    | Wert 1
                     Eigenschaft2 |          |
                     Eigenschaft3 | Wert2    |
                     Eigenschaft4 |          | Wert4
    

    Wie müsste die SQL Syntax dazu aussehen? Ich kriege die Tabellen zwar hintereinander, aber bei mir wird Eigenschaft2 nicht angezeigt.



  • Hallo,

    SELECT tab1.Wert, tab2.Wert, tab3.Wert
       [INNER|RIGHT|LEFT|...] JOIN tab2 ON (tab2.Eigenschaft=tab1.ID)
       [INNER|RIGHT|LEFT|...] JOIN tab3 ON (tab3.Eigenschaft=tab1.ID)
    FROM tab1
    

    LG



  • Ok, läuft, danke.

    Aber nun kommt noch eine weitere Beziehung zwischen Tabelle1 bzw. 2 und einer weiteren Eigenschaftentabelle dazu. Kann ich die einfach dazwischen schreiben?



  • Hallo,

    du kannst mit den ON-Klauseln spielen wie du willst und die JOIN's erweitern bis der Arzt kommt.

    SELECT tab1.Wert, tab2.Wert, tab3.Wert
       [INNER|RIGHT|LEFT|...] JOIN tab2 ON (tab2.Eigenschaft=tab1.ID
                                            [AND|OR] tab2.Irgendwas=tab1.irgendwas
                                            [AND|OR...])
       [INNER|RIGHT|LEFT|...] JOIN tab3 ON (tab3.Eigenschaft=tab1.ID)
       [INNER|RIGHT|LEFT|...JOIN]
       [INNER|RIGHT|LEFT|...JOIN]
    FROM tab1
    

    LG



  • Ok, mein Problem war, dass in Tabelle1 die Eigenschaft2 mit NULL oder eben einem Fremdschlüssel angegeben werden konnte. Gab es dann eine Eigenschaft1 mit Eigenschaft2=NULL und zusätzlich mit Eigenschaft2=1, wurde lediglich der Eintrag mit Eigenschaft=1 angezeigt, sofern ich erst Eigenschaft2 ge-JOINt habe und dann Tabelle1 und zwei (was auch so bleiben soll). Ich habe nun den Aufbau der Eigenschaft2 geändert, sodass es für "NULL" auch einen Eintrag gibt...


Anmelden zum Antworten