sql >> データベース >  >> RDS >> Sqlserver

WHERE句に条件があるLEFTJOINが、ONにある同じLEFT JOINと同等ではないのはなぜですか?

    on joinの場合に句が使用されます 一致する行を探しています。 where 句は、すべての結合が完了した後に行をフィルタリングするために使用されます。

    ディズニーのトゥーンズが大統領に投票した例:

    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'
    

    これでもRomneyが返されます Donaldにもかかわらず 彼に投票しなかった。条件をonから移動した場合 whereへ 条項:

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

    Romney 結果セットには含まれなくなります。



    1. 複数列のSQLMAX?

    2. NodeJSPostgresエラーgetaddrinfoENOTFOUND

    3. MySQLストアドプロシージャの作成と使用-チュートリアル

    4. データ変更CTEのINSERTステートメントとCASE式の組み合わせ