sql >> Database teknologi >  >> RDS >> Sqlserver

Filtrering JOINs:WHERE vs. ON

link @Gratzy leveret er nyttigt

Forskellen mellem betingelser i ON-sætningen og WHERE-sætningen er bestemt en grå.

For INNER JOINS er de tilsvarende. For OUTER JOINS er din forståelse korrekt, at WHERE-sætningen er begrebsmæssigt anvendt, efter at ON-betingelsen er blevet evalueret.

Men i mange tilfælde skyldes forskellen mere hensigten end funktionalitet. Der er ofte en semantisk forskel mellem ON-betingelserne og WHERE-sætningen.

For eksempel implementerede ældre versioner af SQL Server virkelig ON-syntaksen ved at bruge betingelserne i WHERE-sætningen ved at bruge en *= eller =* syntaks til at antyde LEFT eller RIGHT joinforbindelser (hvilket førte til underligt subtilt forskellige resultater fra LEFT og RIGHT JOIN ækvivalenterne i nogle tilfælde)

Generelt er mit råd altid at bruge de relevante nøglefelter i ON-klausulen til at forbinde poster baseret på logikken i, hvordan posterne associerer med hinanden. Brug WHERE-sætningen til at anvende filtreringsbetingelser, der gradvist begrænser dette resultatsæt.




  1. mysql_fetch_array og kun string array nøgler

  2. psycopg2 + pgbouncer. Asynkron tilstand med givet fejl

  3. java.sql.SQLEundtagelse:- ORA-01000:maksimale åbne markører overskredet

  4. Kan ikke oprette forbindelse til remote mysql fra Mac lion