2017-12-19 11 views
0

Zuerst merke ich, es gibt andere ähnliche Fragen, ich habe durch viele von ihnen gelesen, und ich kann das nicht herausfinden.Join drei Tabellen MySQL Wo

Ich habe drei Tabellen so.

urilist 
---------------- 
rowid | uri 
1000  xyz 
1001  abc 
1002  cde 
1003  fgh 

wordlist 
---------------- 
rowid | word 
1  word1 
2  word2 
3  word3 
4  word4 

wordlocation2 
---------------- 
uriid | wordid 
1001  1 
1001  2 
1001  3 
1001  4 

Tabelle ein halten uris. Tabelle b enthält Wörter. Tabelle c ist eine Nachschlagetabelle, in der Sie jedes Wort sehen können, das einem uri zugeordnet ist oder umgekehrt.

Ich muss die Wörter für ein gegebenes uri zurückgeben. so für uri abc Ich brauche Wörter word1,word2,word3,word4.

Das war mein letzter Versuch.

select word from wordlist join wordlocation2 on wordlist.rowid = 

wordlocation2.wordid 
left join urilist on wordlocation2.uriid = urilist.rowid 
and urilist.uri = "a uri address"; 

Dies ergab Tausende von nicht miteinander verwandten Antworten. Ich bin mir nicht sicher, wie ich das am besten machen soll. Jede Hilfe würde sehr geschätzt werden.

Antwort

1

Lassen Sie uns *, indem Sie auf Ihre Abfrageergebnis aussehen.

select * from wordlist join wordlocation2 on wordlist.rowid = wordlocation2.wordid left join urilist on wordlocation2.uriid = urilist.rowid and urilist.uri = "a uri address"; 

Dies holt das unten stehende Ergebnis

enter image description here

Wie Sie wordlocation2 getan: Ich habe von Ihnen für den Nachweis in Bezug auf LEFT JOIN

Query als gegeben 'eine uri-Adresse' verwendet LEFT JOIN urilist, auch wenn es keine passende Zeile für urilist gibt, wird ein Wert in das Ergebnis kommen, indem der urilist-Wert NULL wird (dies ist die Bedeutung linker Joins). In Ihrem Fall sollten Sie keinen Wert erhalten, wenn es keine passende Zeile gibt. Verwenden Sie also JOIN anstelle von LINKER JOIN.

Ich denke, dass die Reihenfolge der Tabellen nicht wichtig ist, da alles hier innerlich ist. Ich bin immer bereit, mich selbst zu korrigieren, wenn jemand dazu einen Vorschlag macht.

+0

Hat den Trick, danke! –

0

Dies sollte Ihre Frage sein:

select l.word from urilist u 
join wordlocation2 w on w.uriid = u.rowid 
join wordlist l on l.rowid = wordid 
where u.uri = 'some_uri' 
0

Verwendung:

select u.uri, wl.word 
from urilist u 
join wordlocation2 wl2 on wl2.uriid = u.id 
join wordlist wl on wl2.wordid = wl.rowid