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 .