A LEFT ANTI SEMI JOIN
là kiểu kết hợp chỉ trả về các hàng riêng biệt trong tập hợp hàng bên trái không có hàng phù hợp trong tập hợp hàng bên phải.
Nhưng khi sử dụng T-SQL trong SQL Server, nếu bạn cố gắng sử dụng rõ ràng LEFT ANTI SEMI JOIN
trong truy vấn của mình, có thể bạn sẽ gặp lỗi sau:
Msg 155, Level 15, State 1, Line 4
'ANTI' is not a recognized join option.
May mắn thay, SQL Server bao gồm EXCEPT
toán tử, cho phép chúng tôi thực hiện LEFT ANTI SEMI JOIN
.
Khi bạn sử dụng EXCEPT
, nó xuất hiện trong kế hoạch thực thi truy vấn dưới dạng LEFT ANTI SEMI JOIN
.
Bạn cũng có thể tạo một truy vấn con thực hiện điều tương tự.
Ví dụ
Hãy tưởng tượng chúng ta có hai bảng; Cats
và Dogs
và sau đó chúng tôi chạy truy vấn sau:
SELECT
CatName AS PetName
FROM Cats
EXCEPT
SELECT
DogName AS PetName
FROM Dogs;
Truy vấn này sử dụng EXCEPT
và nó sẽ xuất hiện dưới dạng LEFT ANTI SEMI JOIN
trong kế hoạch thực hiện.
Tương tự như làm như sau:
SELECT
DISTINCT CatName
FROM Cats c
WHERE NOT EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);
Đây là kế hoạch thực thi cho truy vấn đó:
Nếu bạn sử dụng U-SQL với Azure Data Lake Analytics, bạn có thể sử dụng ANTISEMIJOIN
mệnh đề thực hiện các phép nối chống bán phải và trái. Đó là, bạn có thể sử dụng LEFT ANTISEMIJOIN
hoặc RIGHT ANTISEMIJOIN
.