Oracle
 sql >> Database >  >> RDS >> Oracle

Differenza di visibilità nel join di sottoquery e dove

In

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

il ON la clausola si riferisce solo alle due tabelle partecipanti al join, ovvero wp e wpw . I nomi della query esterna non sono visibili.

Il WHERE clausola (e suo cugino HAVING è il mezzo con cui la query esterna è correlata alla sottoquery. I nomi della query esterna sono visibile ad esso.

Per renderlo facile da ricordare,

  • ON riguarda il JOIN, il modo in cui due tabelle si relazionano per formare una riga (o righe)
  • WHERE riguarda i criteri di selezione, il test che le righe devono superare

Mentre il parser SQL ammetterà i valori letterali (che non sono nomi di colonna) nella clausola ON, traccia la linea in corrispondenza dei riferimenti alle colonne all'esterno del join. Potresti considerare questo come un favore che protegge dagli errori.

Nel tuo caso, il wo la tabella non fa parte di JOIN , e viene rifiutato. è parte dell'intera query, ed è riconosciuto da WHERE .