I
FROM working_place wp
JOIN working_place_worker wpw ON ...
WHERE ...
ON
klausul hänvisar endast till de två tabellerna som deltar i kopplingen, nämligen wp
och wpw
. Namn från den yttre frågan är inte synliga för den.
WHERE
klausul (och dess kusin HAVING
är det sätt på vilket den yttre frågan är korrelerad till underfrågan. Namn från den yttre frågan är synlig för den.
För att göra det lätt att komma ihåg,
- ON handlar om JOIN, hur två tabeller förhåller sig till att bilda en rad (eller rader)
- VAR handlar det om urvalskriterierna, testet som raderna måste klara
Medan SQL-parsern kommer att tillåta bokstaver (som inte är kolumnnamn) i ON-satsen, drar den linjen vid referenser till kolumner utanför kopplingen. Du kan se detta som en tjänst som skyddar mot misstag.
I ditt fall är wo
tabellen är inte en del av JOIN
, och avvisas. Det är en del av hela frågan och känns igen av WHERE
.