Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Join mit mehreren "ON"s aus einer Tabelle

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von MysterioJN, 30 September 2016.

  1. MysterioJN

    MysterioJN Datenbank-Guru

    Ja, ich weiß, ist dämlich betitelt. Weiß auch nicht genau wie ich es beschreiben/benennen soll.

    Hier die Stammtabelle der Kategorien:
    ID / Kategorie
    2 / Landwirtschaft
    3 / Ernährung
    4 / Lebensmittel
    7 / Physilogisch
    9 / was auch immer



    Hier der Aufbau der Hilfstabelle:

    ID / KategorieID1 / KategorieID2 / KategorieID3
    1 / 2 / 3 / 7
    2 / 4 / 9 / Null


    Wie muss mein Join aussehen, wenn ich im SELECT statt der KategorieID1, KategorieID2 und KategorieID3 die jeweiligen Kategorienamen (aus der Tabelle Kategorie) anzeigen lassen will?

    Was er nicht erlaubt ist (da Stammtabelle mehrfach vorkommt):
    Code:
    FROM "Hilfstabelle"
    LEFT JOIN "Stammtabelle" ON Hilfstabelle.KategorieID1 = Stammtabelle.ID
    LEFT JOIN "Stammtabelle" ON Hilfstabelle.KategorieID2 = Stammtabelle.ID
    LEFT JOIN "Stammtabelle" ON Hilfstabelle.KategorieID3 = Stammtabelle.ID

    Geht das irgendwie in eine Zeile mit IN() ?? Aber das hat bei mir nicht geklappt:
    Code:
    FROM "Hilfstabelle"
    LEFT JOIN "Stammtabelle" ON IN(Hilfstabelle.KategorieID1, Hilfstabelle.KategorieID2, Hilfstabelle.KategorieID3) = Stammtabelle.ID

    Hab jetzt eine Woche Urlaub. Vlt. komm ich ja danach dank eurer eventuellen Hilfe weiter.

    Beste Grüße euer Myst
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Nein. Dein Ansatz mit den 3 JOIN-Befehlen ist schon richtig. Du mußt jedes Mal aber der gejointen Tabelle einen Alias geben, mit dem Du dann zugreifen kannst.

    a la

    select ... from ... left join kategorien k1 on ... left join kategorien k2 on ...


    Und dann kannst Du vis k1.<spalte> jeweils drauf zugreifen.
     
  3. MysterioJN

    MysterioJN Datenbank-Guru

    Autsch! Wenn Doofheit weh tut. Danke. Natürlich. Entschuldige bitte vielmals!
     
  4. MysterioJN

    MysterioJN Datenbank-Guru

    'Ich muss doch noch mal nachhaken. Kam erst heute dazu, mich nochmal daran zusetzten. Irgendwie ist aber nicht mein Tag heute.

    Hier die Stammtabelle der Kategorien mit den IDs und den entsprechenden NAMEN:
    ID / Kategorie
    2 / Landwirtschaft
    3 / Ernährung
    4 / Lebensmittel
    7 / Physilogisch
    9 / was auch immer



    Hier der Aufbau der Hilfstabelle:
    ID / KategorieID1 / KategorieID2 / KategorieID3
    1 / 2 / 3 / 7
    2 / 4 / 9 / Null


    Also nochmal: Statt zahlen möchte ich Namen im HilfstabellenSelect stehen haben.

    Das Ergebnis zeigt aber in allen Spalten den selben Inhalt an UND zudem nur EINEN Kategorienamen, obwohl die Datenzeile in der Hilfstabelle mehrere Zuordnungen hat.

    Code:
    SELECT
    
    Stammtabelle.Name K1,
    Stammtabelle.Name K2,
    Stammtabelle.Name K3
    
    FROM Hilfstabelle
    LEFT JOIN Stammtabelle  ON  (Stammtabelle.ID =  Hilfstabelle.KategorieID1)
    LEFT JOIN Stammtabelle K2 ON  (Stammtabelle.ID =  Hilfstabelle.KategorieID2)
    LEFT JOIN Stammtabelle K3 ON  (Stammtabelle.ID =  Hilfstabelle.KategorieID3)
     
    Zuletzt bearbeitet: 14 Oktober 2016
  5. MysterioJN

    MysterioJN Datenbank-Guru

    Bzw. hier eine andere Variante (klappt aber nicht, da er die Spaltennamen als "ungültig" definiert nach den Kürzeln K1, K2, K3 und HT1

    Code:
    SELECT
    
    K1.Stammtabelle.Name,
    K2.Stammtabelle.Name,
    K3.Stammtabelle.Name
    
    FROM Hilfstabelle HT1
    LEFT JOIN Stammtabelle K1 ON  (K1.Stammtabelle.ID =  HT1.Hilfstabelle.KategorieID1)
    LEFT JOIN Stammtabelle K2 ON  (K2.Stammtabelle.ID =  HT1.Hilfstabelle.KategorieID2)
    LEFT JOIN Stammtabelle K3 ON  (K3.Stammtabelle.ID =  HT1.Hilfstabelle.KategorieID3)
     
  6. ukulele

    ukulele Datenbank-Guru

    Wenn du einen Alias vergibst brauchst du nicht mehr den Tabellennamen.
    Code:
    SELECT
    HT1.ID,
    K1.Name,
    K2.Name,
    K3.Name
    FROM Hilfstabelle HT1
    LEFT JOIN Stammtabelle K1 ON (K1.ID = HT1.KategorieID1)
    LEFT JOIN Stammtabelle K2 ON (K2.ID = HT1.KategorieID2)
    LEFT JOIN Stammtabelle K3 ON (K3.ID = HT1.KategorieID3)
     
  7. MysterioJN

    MysterioJN Datenbank-Guru

    Danke!! Jetzt hat es geklappt. Wenn ich dich nicht hätte... Hab einen schönen Wochenstart!
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden