Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come eseguire un SEMI JOIN SINISTRO in SQL Server

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 .