2016-12-30 5 views
1

Meine Zweifel aufwirft, nachdem ich dies tat:Primärschlüssel von LEFT JOIN

select name 
from Highschooler 
where ID in(select Friend.ID2 
      from Highschooler left join Friend 
      on Friend.ID1 = '1911' or Friend.ID1 = '1689'); 

Die Tabellen können here

Das erwartete Ergebnis war richtig und respektiert diese Klausel zu finden: die Namen finden von allen Schülern, die mit jemandem namens Gabriel befreundet sind.

Beachten Sie, dass ich keinen Hinweis auf den Tisch gemacht hat Highschooler.ID

Das schien mir intuitiv, aber dann hat mir denken, wie highschooler Tabellen-ID nicht als Primärschlüssel in meiner Werkbank ausgewählt haben.

Also, wenn mysql eine Linke Join tut, wie weiß Mysql, dass ich ID von Highschooler mit einer Spalte von Friend? Die Tabellen haben keinen gemeinsamen Spaltennamen. Also für alle ich weiß sql könnte versuchen, Klasse von Highschooler, mit ID1 von Friend.

+0

Was versuchen Sie zu erreichen? Und Ihre linke Verbindung hat keine Verbindungsbedingung zwischen zwei Tabellen. – Viki888

+0

@ Viki888 Es tut mir leid, ich habe weitere Informationen hinzugefügt. – Souza

Antwort

0

Die Antwort ist, dass MySQL nicht weiß, wie man Tabellen verbindet. Sie müssen MySQL mitteilen, wie Sie den Tabellen beitreten. Verwenden Sie bei einer äußeren Verbindung die Klausel on. In diesem speziellen Fall benötigen Sie keinen Outer-Join, da Sie IDs aus der Friend-Tabelle erhalten möchten.

+0

Aber warum hat sich mysql entschieden, Highschooler.ID zu benutzen, um sich mit Friend zu paaren? Ich habe nie einen Verweis auf ID – Souza

+0

MySQL erstellt eine kartesische Join in Ermangelung einer realen Join-Bedingung. – Shadow