LEFT ANTI SEMI JOIN
je typ spojení, které vrací pouze ty odlišné řádky v levé sadě řádků, které nemají žádný odpovídající řádek v pravé sadě řádků.
Ale když používáte T-SQL na SQL Server, pokud se pokusíte explicitně použít LEFT ANTI SEMI JOIN
ve vašem dotazu pravděpodobně dostanete následující chybu:
Msg 155, Level 15, State 1, Line 4
'ANTI' is not a recognized join option.
Naštěstí SQL Server obsahuje EXCEPT
operátor, který nám umožňuje provést LEFT ANTI SEMI JOIN
.
Když použijete EXCEPT
operátor, objeví se v plánu provádění dotazu jako LEFT ANTI SEMI JOIN
.
Můžete také vytvořit poddotaz, který dělá totéž.
Příklad
Představte si, že máme dva stoly; Cats
a Dogs
a poté spustíme následující dotaz:
SELECT
CatName AS PetName
FROM Cats
EXCEPT
SELECT
DogName AS PetName
FROM Dogs;
Tento dotaz používá EXCEPT
operátor a zobrazí se jako LEFT ANTI SEMI JOIN
v prováděcím plánu.
Je to podobné, jako když uděláte následující:
SELECT
DISTINCT CatName
FROM Cats c
WHERE NOT EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);
Zde je plán provedení pro tento dotaz:
Pokud používáte U-SQL s Azure Data Lake Analytics, můžete použít ANTISEMIJOIN
klauzule udělat pravý a levý anti semi spoj. To znamená, že můžete použít LEFT ANTISEMIJOIN
nebo RIGHT ANTISEMIJOIN
.