Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment faire une LEFT ANTI SEMI JOIN dans SQL Server

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 .