sql >> Database >  >> RDS >> Sqlserver

Waarom en wanneer is een LEFT JOIN met voorwaarde in de WHERE-clausule niet gelijk aan dezelfde LEFT JOIN in ON?

De on clausule wordt gebruikt wanneer de join is op zoek naar bijpassende rijen. De where clausule wordt gebruikt om rijen te filteren nadat alle samenvoegingen zijn voltooid.

Een voorbeeld waarbij Disney toons op president stemde:

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'

Dit geeft nog steeds Romney hoewel Donald heb niet op hem gestemd. Als u de voorwaarde verplaatst van de on naar de where clausule:

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

Romney zal niet langer in de resultatenset staan.



  1. Hoe kan ik nul/0 resultaten opnemen in het COUNT-aggregaat?

  2. Hoe de CREATE VIEW-code voor een weergave in PostgreSQL te zien?

  3. Wat is het verschil tussen door komma's gescheiden joins en join op syntaxis in MySQL?

  4. Kan geen verbinding maken met databaseserver (mysql workbench)