sql >> Databasteknik >  >> RDS >> Sqlserver

Filtrera JOINs:WHERE vs. ON

länk @Gratzy tillhandahålls är till hjälp

Skillnaden mellan villkoren i ON-satsen och WHERE-satsen är verkligen grå.

För INNER JOINS är de likvärdiga. För OUTER JOINS är din uppfattning korrekt att WHERE-satsen tillämpas begreppsmässigt efter att ON-villkoret har utvärderats.

Men i många fall beror skillnaden mer på avsikt än funktionalitet. Det finns ofta en semantisk skillnad mellan ON-villkoren och WHERE-satsen.

Till exempel implementerade äldre versioner av SQL Server verkligen ON-syntaxen med villkor i WHERE-satsen, med en *= eller =* syntax för att antyda LEFT- eller RIGHT-kopplingar (vilket ledde till konstigt subtilt olika resultat från LEFT- och RIGHT JOIN-ekvivalenterna i vissa fall)

I allmänhet är mitt råd att alltid använda lämpliga nyckelfält i ON-klausulen för att sammanfoga poster baserat på logiken i hur posterna associerar med varandra. Använd WHERE-satsen för att tillämpa filtreringsvillkor som gradvis begränsar denna resultatuppsättning.




  1. SqlAlchemy:Frågar längden json-fältet som har en array

  2. Oracle DB-tabell eller vy finns inte

  3. Hur man hittar datumformatet som används i den aktuella sessionen i SQL Server (T-SQL)

  4. Hur viktiga är uppslagstabeller?