Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tại sao và khi nào một mệnh đề LEFT JOIN với điều kiện trong mệnh đề WHERE không tương đương với cùng một LEFT JOIN trong ON?

on mệnh đề được sử dụng khi join đang tìm kiếm các hàng phù hợp. where mệnh đề được sử dụng để lọc các hàng sau khi thực hiện xong tất cả các phép nối.

Một ví dụ với những người ủng hộ Disney bỏ phiếu cho chủ tịch:

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'

Điều này vẫn trả về Romney mặc dù Donald đã không bỏ phiếu cho anh ta. Nếu bạn di chuyển điều kiện từ on đến where mệnh đề:

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

Romney sẽ không còn trong tập kết quả.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đối chiếu trong SQL Server

  2. Trả lại các hàng theo thứ tự chính xác mà chúng đã được chèn

  3. Cách cài đặt sqlcmd &bcp trên Ubuntu

  4. SQL chọn tối đa (ngày) và giá trị tương ứng

  5. Làm thế nào bạn có thể đặt tên cho các Bảng của Tập dữ liệu mà bạn trả về trong một chương trình đã lưu trữ?