A LEFT ANTI SEMI JOIN
è un tipo di join che restituisce solo quelle righe distinte nel set di righe di sinistra che non hanno una riga corrispondente nel set di righe di destra.
Ma quando si utilizza T-SQL in SQL Server, se si tenta di utilizzare esplicitamente LEFT ANTI SEMI JOIN
nella tua query, probabilmente riceverai il seguente errore:
Msg 155, Level 15, State 1, Line 4
'ANTI' is not a recognized join option.
Fortunatamente, SQL Server include EXCEPT
operatore, che ci permette di eseguire un LEFT ANTI SEMI JOIN
.
Quando usi EXCEPT
operatore, appare nel piano di esecuzione della query come LEFT ANTI SEMI JOIN
.
Puoi anche costruire una sottoquery che faccia la stessa cosa.
Esempio
Immagina di avere due tavoli; Cats
e Dogs
, quindi eseguiamo la seguente query:
SELECT
CatName AS PetName
FROM Cats
EXCEPT
SELECT
DogName AS PetName
FROM Dogs;
Questa query utilizza EXCEPT
operatore e apparirà come LEFT ANTI SEMI JOIN
nel piano di esecuzione.
È simile a fare quanto segue:
SELECT
DISTINCT CatName
FROM Cats c
WHERE NOT EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);
Ecco il piano di esecuzione per quella query:
Se usi U-SQL con Azure Data Lake Analytics, puoi usare ANTISEMIJOIN
clausola per fare anti semi join destro e sinistro. Cioè, puoi usare LEFT ANTISEMIJOIN
o RIGHT ANTISEMIJOIN
.