Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо и кога LEFT JOIN с условие в клауза WHERE не е еквивалентно на същото LEFT JOIN в ON?

on клаузата се използва, когато join търси съвпадащи редове. where Клаузата се използва за филтриране на редове, след като е извършено цялото свързване.

Пример с това, че Disney toons гласува за президент:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. COT() Примери в SQL Server

  2. SQL Server - Премахнете всички непечатаеми ASCII знаци

  3. Как мога да покажа структурата на таблицата в заявката на SQL Server?

  4. Нечислови знаци, които връщат положително при използване на ISNUMERIC() в SQL Server

  5. freeTDS не използва своята конфигурация