A LEFT ANTI SEMI JOIN
е тип присъединяване, което връща само онези отделни редове в левия набор от редове, които нямат съвпадащ ред в десния набор от редове.
Но когато използвате T-SQL в SQL Server, ако се опитате изрично да използвате LEFT ANTI SEMI JOIN
във вашата заявка вероятно ще получите следната грешка:
Msg 155, Level 15, State 1, Line 4
'ANTI' is not a recognized join option.
За щастие SQL Server включва EXCEPT
оператор, който ни позволява да извършим LEFT ANTI SEMI JOIN
.
Когато използвате EXCEPT
оператор, той се появява в плана за изпълнение на заявката като LEFT ANTI SEMI JOIN
.
Можете също така да създадете подзаявка, която прави същото.
Пример
Представете си, че имаме две маси; Cats
и Dogs
и след това изпълняваме следната заявка:
SELECT
CatName AS PetName
FROM Cats
EXCEPT
SELECT
DogName AS PetName
FROM Dogs;
Тази заявка използва EXCEPT
оператор и ще се появи като LEFT ANTI SEMI JOIN
в плана за изпълнение.
Това е подобно на това да направите следното:
SELECT
DISTINCT CatName
FROM Cats c
WHERE NOT EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);
Ето плана за изпълнение на тази заявка:
Ако използвате U-SQL с Azure Data Lake Analytics, можете да използвате ANTISEMIJOIN
клауза за извършване на дясно и ляво анти полусъединяване. Това означава, че можете да използвате LEFT ANTISEMIJOIN
или RIGHT ANTISEMIJOIN
.