Konzeptuell besteht der Unterschied darin, dass ON
Klauseln die Bedingungen angeben, die die beiden Tabellen betreffen (z.ON table2.table1id = table1.id AND table2.is_active = 'Y'
), während WHERE
Klauseln Bedingungen angeben, die bestimmen, welche Zeilen Sie tatsächlich möchten (z. B. WHERE table1.name LIKE 'Foo %' AND table1.type = 3
).
Aber dieser Unterschied, wie Sie gesehen haben, als kein Effekt, wenn Sie eine INNER JOIN
verwenden; Es wirkt sich nur auf die Abfrageergebnisse aus, wenn Sie eine LEFT OUTER JOIN
oder whatnot haben (wobei eine fehlgeschlagene Bedingung in der ON
-Klausel bedeutet, dass Sie Daten aus table2
auslassen, während eine fehlgeschlagene Bedingung in der WHERE
-Klausel bedeutet, dass Sie ganze Zeilen aus Ihrer Ergebnismenge herausfiltern).
Also, wenn Sie eine INNER JOIN
verwenden, müssen Sie nur entscheiden, welcher Weg scheint eine intuitivere Art, über eine bestimmte Bedingung zu denken. Es gibt nicht immer eine einzige "richtige" Antwort.
lesen http://stackoverflow.com/questions/354070/sql-join -whole-clause-vs-on-Klausel Alle Antworten sind Teilmenge dieses Threads (einschließlich seiner ausgehenden Links;)). Ich hoffe es hilft. – instanceOfObject