2017-03-03 3 views
0

Ich versuche diese Abfrage auszuführen, konnte aber den Arbeitsprozess nicht verstehen.Funktioniert diese Abfrage wie Cross-Join?

SELECT * 
FROM TABLE1 T1 
INNER JOIN TABLE2 T2 ON T1.ID = T2.ID 
LEFT JOIN TABLE1 T3 ON T1.ID = T2.ID 

tabelle1 enthält 3 Datensätze mit sequentieller ID 1, 2, 3 und table2 enthält 4 Einträge mit sequentieller ID 1, 2, 3, 4 und einer anderen Sache, die ich mag auch wissen, dass ist, hat diese Abfrage von rechts nach links ausführen? Ich meine, linker Join-Prozess wird zuerst ausgeführt, dann innerer Join? Ich sage das laut Abfrageausführungsplan.

Antwort

3

Hier ist Ihre aktuelle Abfrage:

SELECT * 
FROM table1 t1 
INNER JOIN table2 t2 
    ON t1.id = t2.id 
LEFT JOIN table1 t3 
    ON t1.id = t2.id 

Die erste Verknüpfung ist nur eine normale innere Verknüpfung zwischen table1 und table2. Der zweite Join ist ein linker Join, aber die ON Bedingung ist überflüssig, und ich glaube, das Verhalten wäre das gleiche, ohne dass diese Bedingung überhaupt vorhanden wäre. Der Grund dafür ist, dass die Join-Bedingung t1.id = t2.id an dieser Stelle in der Abfrage bereits immer wahr ist, und zwar für alle Einträge in der Zwischentabelle. Daher scheint es, dass die zweite Verbindung effektiv eine Kreuzverbindung mit table1 wäre.

In der Regel wird Ihre Join-Bedingung die beiden Tabellen verbunden werden.

2

Ja, es funktioniert wie ein Cross-Join. Wenn dies beabsichtigt ist, sollten Sie es richtig umschreiben. Was haben Sie dort ist irreführend und verwirrend (woher kommt es aus ursprünglich?)

select * from table1 t1 
inner join table2 t2 
on t1.id=t2.id 
cross join table1 t3 

Die Reihenfolge, Tabellen, Filter, Joins evalulated durch den Abfrage-Plan diktiert werden (drücken Sie CTRL-L). Dies kann sich jederzeit ändern. Sie sollten nicht besorgt sein über die Reihenfolge, in der diese ausgeführt werden - Sie müssen nur wissen, dass Sie die gleichen Ergebnisse erhalten, egal wie sie ausgeführt werden. Der Abfrageplaner wählt möglicherweise eine Methode für die andere, wenn sie der Meinung ist, dass sie schneller ist