Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Unterschiedliche Sichtbarkeit in Unterabfrageverknüpfung und wo

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 .