sql >> Database >  >> RDS >> Oracle

Verschil zichtbaarheid in subquery join en waar

In

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

de ON clausule verwijst alleen naar de twee tafels die deelnemen aan de join, namelijk wp en wpw . Namen uit de buitenste query zijn er niet voor zichtbaar.

De WHERE clausule (en zijn neef HAVING is de manier waarop de buitenste query wordt gecorreleerd met de subquery. Namen uit de buitenste zoekopdracht zijn er zichtbaar voor.

Om het gemakkelijk te onthouden,

  • ON gaat over de JOIN, hoe twee tabellen zich verhouden tot een rij (of rijen)
  • WAAR gaat het over de selectiecriteria, de test die de rijen moeten doorstaan

Hoewel de SQL-parser letterlijke waarden (die geen kolomnamen zijn) toelaat in de ON-component, trekt hij de lijn bij verwijzingen naar kolommen buiten de join. Je zou dit kunnen zien als een gunst die behoedt voor fouten.

In jouw geval, de wo tabel maakt geen deel uit van de JOIN , en wordt afgewezen. Het is onderdeel van de hele zoekopdracht, en wordt herkend door WHERE .




  1. MySQL-trigger om oude record te verwijderen en nieuwe in te voegen

  2. Caching in JDBC

  3. Zoeken tussen datum in zoekopdracht toont niet het juiste resultaat

  4. Behoud regelonderbrekingen van TextArea bij schrijven naar MySQL