Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Dlaczego i kiedy LEFT JOIN z warunkiem w klauzuli WHERE nie jest równoznaczny z tym samym LEFT JOIN w klauzuli ON?

on Klauzula jest używana, gdy join szuka pasujących wierszy. where Klauzula służy do filtrowania wierszy po zakończeniu łączenia.

Przykład z bajkami Disneya głosującymi na prezydenta:

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'

To nadal zwraca Romney mimo że Donald nie głosował na niego. Jeśli przeniesiesz warunek z on do where klauzula:

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

Romney nie będzie już w zestawie wyników.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak formatować wartości ujemne za pomocą nawiasów w SQL Server (T-SQL)

  2. Typ danych do przechowywania adresu IP w SQL Server

  3. 5 składni SQL i zasad zapytań dla lepszego monitorowania baz danych

  4. Jak uzyskać dane z ostatnich 7 dni od aktualnej daty i godziny do ostatnich 7 dni na serwerze sql?

  5. Pobierz poprzedni i następny wiersz z wierszy wybranych z warunkami (WHERE)