En LEFT ANTI SEMI JOIN
är en typ av koppling som endast returnerar de distinkta raderna i den vänstra raduppsättningen som inte har någon matchande rad i den högra raduppsättningen.
Men när du använder T-SQL i SQL Server, om du försöker uttryckligen använda LEFT ANTI SEMI JOIN
i din fråga kommer du förmodligen att få följande felmeddelande:
Msg 155, Level 15, State 1, Line 4
'ANTI' is not a recognized join option.
Som tur är innehåller SQL Server koden EXCEPT
operator, som låter oss utföra en LEFT ANTI SEMI JOIN
.
När du använder EXCEPT
operatör, visas den i frågeexekveringsplanen som en LEFT ANTI SEMI JOIN
.
Du kan också konstruera en underfråga som gör samma sak.
Exempel
Föreställ dig att vi har två bord; Cats
och Dogs
, och vi kör sedan följande fråga:
SELECT
CatName AS PetName
FROM Cats
EXCEPT
SELECT
DogName AS PetName
FROM Dogs;
Den här frågan använder EXCEPT
operator, och den kommer att visas som en LEFT ANTI SEMI JOIN
i genomförandeplanen.
Det liknar att göra följande:
SELECT
DISTINCT CatName
FROM Cats c
WHERE NOT EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);
Här är exekveringsplanen för den frågan:
Om du använder U-SQL med Azure Data Lake Analytics kan du använda ANTISEMIJOIN
klausul för att göra höger och vänster anti semi joins. Det vill säga, du kan använda LEFT ANTISEMIJOIN
eller RIGHT ANTISEMIJOIN
.