sql >> Databasteknik >  >> RDS >> Sqlserver

Varför och när en LEFT JOIN med villkor i WHERE-satsen inte motsvarar samma LEFT JOIN i ON?

on satsen används när join letar efter matchande rader. var sats används för att filtrera rader efter att all sammanfogning är klar.

Ett exempel med Disney Toon som röstar på president:

declare @candidates table (name varchar(50));
insert @candidates values 
    ('Obama'), 
    ('Romney');
declare @votes table (voter varchar(50), voted_for varchar(50));
insert @votes values 
    ('Mickey Mouse', 'Romney'),
    ('Donald Duck', 'Obama');

select  *
from    @candidates c
left join    
        @votes v
on      c.name = v.voted_for
        and v.voter = 'Donald Duck'

Detta returnerar fortfarande Romney även om Donald röstade inte på honom. Om du flyttar villkoret från on till var klausul:

select  *
from    @candidates c
left join    
        @votes v
on      c.name = v.voted_for
where   v.voter = 'Donald Duck'

Romney kommer inte längre att finnas i resultatuppsättningen.



  1. Hur kan jag välja från värdelistan i Oracle

  2. Hur man lägger till rankningspositioner till rader med DENSE_RANK() i SQL

  3. välj från en tabell, infoga i en annan tabell oracle sql-fråga

  4. Hur man väljer Top N rader per grupp i MySQL