sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo hacer un SEMI JOIN IZQUIERDO en SQL Server

UN LEFT SEMI JOIN es una especie de media unión. Devuelve los valores distintos que devuelve la consulta en los lados izquierdo y derecho de la consulta.

Sin embargo, cuando usa T-SQL en SQL Server, si intenta usar explícitamente LEFT SEMI JOIN en su consulta, probablemente obtendrá el siguiente error:

Msg 155, Level 15, State 1, Line 4
'SEMI' is not a recognized join option.

Afortunadamente, T-SQL incluye el INTERSECT operador, que nos permite realizar un LEFT SEMI JOIN .

Cuando usas el INTERSECT operador, aparece en el plan de ejecución de la consulta como LEFT SEMI JOIN .

También puede construir una subconsulta que haga lo mismo.

Ejemplo

Imagina que tenemos dos mesas; Cats y Dogs , y luego ejecutamos la siguiente consulta:

SELECT 
    CatName AS PetName
FROM Cats
INTERSECT
SELECT 
    DogName AS PetName
FROM Dogs;

Esta consulta utiliza el INTERSECT operador, por lo que aparecerá como LEFT SEMI JOIN en el plan de ejecución.

Es similar a hacer lo siguiente:

SELECT 
    DISTINCT CatName
FROM Cats c 
WHERE EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);

Aquí está el plan de ejecución para esa consulta:

Si usa U-SQL con Azure Data Lake Analytics, puede usar SEMIJOIN Cláusula para hacer semiuniones derecha e izquierda. Es decir, puede usar LEFT SEMIJOIN o RIGHT SEMIJOIN .