Unter
FROM working_place wp
JOIN working_place_worker wpw ON ...
WHERE ...
das ON
Klausel bezieht sich nur zu den beiden am Join beteiligten Tabellen, nämlich wp
und wpw
. Namen aus der äußeren Abfrage sind für sie nicht sichtbar.
Das WHERE
-Klausel (und ihr Cousin HAVING
ist das Mittel, mit dem die äußere Abfrage mit der Unterabfrage korreliert wird. Namen aus der äußeren Abfrage sind dafür sichtbar.
Um es leichter zu merken,
- ON handelt vom JOIN, wie zwei Tabellen miteinander in Beziehung stehen, um eine Zeile (oder Zeilen) zu bilden
- WO geht es um die Auswahlkriterien, den Test, den die Zeilen bestehen müssen
Während der SQL-Parser Literale (die keine Spaltennamen sind) in der ON-Klausel zulässt, zieht er die Grenze bei Verweisen auf Spalten außerhalb des Joins. Sie könnten dies als einen Gefallen ansehen, der vor Fehlern schützt.
In Ihrem Fall das wo
Tabelle ist nicht Teil des JOIN
, und wird abgelehnt. Es ist Teil der gesamten Abfrage und wird durch WHERE
erkannt .