Oracle
 sql >> Base de données >  >> RDS >> Oracle

Différence de visibilité dans la jointure de sous-requête et où

Dans

FROM working_place wp 
JOIN working_place_worker wpw ON ... 
WHERE ...

le ON la clause se réfère uniquement aux deux tables participant à la jointure, à savoir wp et wpw . Les noms de la requête externe ne lui sont pas visibles.

Le WHERE clause (et sa cousine HAVING est le moyen par lequel la requête externe est corrélée à la sous-requête. Les noms de la requête externe sont visible pour elle.

Pour faciliter la mémorisation,

  • ON concerne le JOIN, la relation entre deux tables pour former une ligne (ou des lignes)
  • WHERE concerne les critères de sélection, le test que les lignes doivent réussir

Bien que l'analyseur SQL admette des littéraux (qui ne sont pas des noms de colonne) dans la clause ON, il trace la ligne aux références aux colonnes en dehors de la jointure. Vous pourriez considérer cela comme une faveur qui protège contre les erreurs.

Dans votre cas, le wo la table ne fait pas partie du JOIN , et est rejeté. C'est c'est partie de l'ensemble de la requête, et est reconnu par WHERE .