sql >> Databáze >  >> RDS >> Sqlserver

Filtrování JOINů:WHERE vs. ON

poskytl odkaz @Gratzy je užitečné

Rozdíl mezi podmínkami v klauzuli ON a klauzuli WHERE je jistě šedý.

Pro INNER JOINS jsou ekvivalentní. Pokud jde o OUTER JOINS, rozumíte správně, že klauzule WHERE je koncepčně aplikována po vyhodnocení podmínky ON.

Ale v mnoha případech je rozdíl způsoben spíše záměrem než funkčností. Mezi podmínkami ON a klauzulí WHERE je často sémantický rozdíl.

Například starší verze SQL Serveru skutečně implementovaly syntaxi ON pomocí podmínek v klauzuli WHERE, využívající *= nebo =* syntaxe, která implikuje spojení LEFT nebo RIGHT (což v některých případech vedlo k podivně jemně odlišným výsledkům od ekvivalentů LEFT a RIGHT JOIN)

Obecně platí, že moje rada je vždy používat příslušná klíčová pole v klauzuli ON ke spojení záznamů na základě logiky toho, jak se záznamy navzájem spojují. Pomocí klauzule WHERE použijte podmínky filtrování, které postupně omezují tuto sadu výsledků.




  1. mysql - zobrazí hodnoty, které existují ve VŠECH tabulkách

  2. PSQLException:tato sada výsledků je uzavřena

  3. Jsou tyto dva dotazy stejné – GROUP BY vs. DISTINCT?

  4. Postgis / Geodjango:Nelze určit verzi PostGIS pro databázi