[MYSQL] (join-)Abfrage mit zwei IDs

OnkelKarl

Grünschnabel
Hallo!

Ich habe zwei Tabellen.
Tabelle1 mit "tab1_id" und "tab1_name"
Tabelle2 mit "tab2_id", "tab2_Start", "tab2_Ende"

"tab2_Start" und "tab2_Ende" sind jeweils die ID von tab1_id.

Wie kann ich nun die Namen (tab1_name) für beide Felder bei einer Abfrage ausgeben lassen?
Mit join habe ich es zumindest mal für tab2_Start geschafft, aber wie nun für den Namen bei tab2_Ende?

Any ideas?

Thx
OnkelKarl
 
Ich bin mir zwar nicht sicher, aber versuch mal ob es hiermit klappt
Code:
SELECT `tab1_name` FROM `Tabelle1`, `Tabelle2` WHERE `tab1_id` IN (`tab2_Start`, `tab2_Ende`) WHERE ...
Da musst Du nur noch die WHERE Klausel einbauen.

redlama
 
Versuch es mal mit Aliastabellennamen:
Code:
SELECT 
tabelle2.tab2_id, 
tst.tab1_name AS Start, 
tend.tab1_name AS Ende 
FROM tabelle2 
JOIN tabelle1 AS tst ON (tst.tab1_id=tabelle2.tab2_Start) 
JOIN tabelle1 AS tend ON (tend.tab1_id=tabelle2.tab2_Ende)
Wenn es gut geht, erhältst Du mit dem Query eine drei-spaltige Tabelle mit den Feldern tab2_id, Start und Ende.
 
Hallo hpvw,

danke, genau das war es.
Nur noch eine kleine Sache: wie werden diejenigen Zeilen noch angezeigt, bei denen es keinen Wert für tab1_name gibt?
Es also nur die ID gibt?

Denke aber, dass ich da eher die tab1 erweitern werde, damit hier die Werte entsprechend vorhanden sind ;-)

Danke an euch beiden, für eure Antworten

Ciao
OnkelKarl
 
Wenn Du statt JOIN einen LEFT JOIN machst, wird für Zeilen, bei denen die Kriterien (der ON-Klausel) nicht erfüllt werden können, für die zweite der Tabellen (hier jeweils die Tabelle1) eine Zeile eingefügt, bei denen jedes Attribut den Wert null enthält. Dennoch sollte wegen der Datenintegrität kein Verweis auf eine Zeile in einer Tabelle bestehen, die es nicht gibt (ich denke mal, die id ist der Primärschlüssel). Also solltest Du die Datensätze nachpflegen oder die Zeilen mit fehlenden Verweiszielen in Tabelle2 löschen.
Eine Frage: Wie ist es zu diesen Inkonsistenzen gekommen?
 
Danke für den Tip mit LEFT JOIN
In der Ursprungsfrage war auch LEFT JOIN enthalten. ;)

Die Inkonsistenz kam dadurch, dass ich Teile der Daten per Skript aus einem plain-text file in eine Tabelle einlese und nicht alle Daten gegenchecke, ob sie denn auch in der anderen Tabelle da sind. Damit kann ich i.M. noch leben. ;)

Thx
OnkelKarl
 
Zurück