sql >> Databasteknik >  >> RDS >> Oracle

Skillnadssynlighet i subquery join och var

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 .




  1. Hur man använder Global Temporary Table i Oracle Procedur?

  2. PostgreSQL 9.3:Dela en kolumn i flera

  3. liferay migrera data från hsql till mysql

  4. Hur undviker man dubbletter när man uppdaterar en MySQL-databas?