A LEFT SEMI JOIN
è una specie di semiunione. Restituisce tutti i valori distinti restituiti da entrambe le query sul lato sinistro e destro della query.
Tuttavia, quando si utilizza T-SQL in SQL Server, se si tenta di utilizzare esplicitamente LEFT SEMI JOIN
nella tua query, probabilmente riceverai il seguente errore:
Msg 155, Level 15, State 1, Line 4
'SEMI' is not a recognized join option.
Fortunatamente, T-SQL include INTERSECT
operatore, che ci consente di eseguire un LEFT SEMI JOIN
.
Quando usi INTERSECT
operatore, appare nel piano di esecuzione della query come LEFT 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
INTERSECT
SELECT
DogName AS PetName
FROM Dogs;
Questa query utilizza il INTERSECT
operatore, e apparirà quindi come LEFT SEMI JOIN
nel piano di esecuzione.
È simile a fare quanto segue:
SELECT
DISTINCT CatName
FROM Cats c
WHERE 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 SEMIJOIN
clausola per eseguire semi join destro e sinistro. Cioè, puoi usare LEFT SEMIJOIN
o RIGHT SEMIJOIN
.