A LEFT ANTI SEMI JOIN
est un type de jointure qui renvoie uniquement les lignes distinctes de l'ensemble de lignes de gauche qui n'ont pas de ligne correspondante dans l'ensemble de lignes de droite.
Mais lors de l'utilisation de T-SQL dans SQL Server, si vous essayez d'utiliser explicitement LEFT ANTI SEMI JOIN
dans votre requête, vous obtiendrez probablement l'erreur suivante :
Msg 155, Level 15, State 1, Line 4
'ANTI' is not a recognized join option.
Heureusement, SQL Server inclut le EXCEPT
qui nous permet d'effectuer un LEFT ANTI SEMI JOIN
.
Lorsque vous utilisez le EXCEPT
opérateur, il apparaît dans le plan d'exécution de la requête sous la forme d'un LEFT ANTI SEMI JOIN
.
Vous pouvez également construire une sous-requête qui fait la même chose.
Exemple
Imaginez que nous avons deux tables; Cats
et Dogs
, puis nous exécutons la requête suivante :
SELECT
CatName AS PetName
FROM Cats
EXCEPT
SELECT
DogName AS PetName
FROM Dogs;
Cette requête utilise le EXCEPT
opérateur, et il apparaîtra comme un LEFT ANTI SEMI JOIN
dans le plan d'exécution.
Cela revient à faire ce qui suit :
SELECT
DISTINCT CatName
FROM Cats c
WHERE NOT EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);
Voici le plan d'exécution de cette requête :
Si vous utilisez U-SQL avec Azure Data Lake Analytics, vous pouvez utiliser le ANTISEMIJOIN
clause pour faire des jointures anti-semi droite et gauche. Autrement dit, vous pouvez utiliser LEFT ANTISEMIJOIN
ou RIGHT ANTISEMIJOIN
.