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

Cómo hacer un SEMI JOIN IZQUIERDO en SQL Server

A LEFT ANTI SEMI JOIN es un tipo de combinación que devuelve solo aquellas filas distintas en el conjunto de filas de la izquierda que no tienen una fila coincidente en el conjunto de filas de la derecha.

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

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

Afortunadamente, SQL Server incluye el EXCEPT operador, que nos permite realizar un LEFT ANTI SEMI JOIN .

Cuando usa el EXCEPT operador, aparece en el plan de ejecución de la consulta como LEFT ANTI 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
EXCEPT
SELECT 
    DogName AS PetName
FROM Dogs;

Esta consulta usa EXCEPT operador, y aparecerá como LEFT ANTI SEMI JOIN en el plan de ejecución.

Es similar a hacer lo siguiente:

SELECT 
    DISTINCT CatName
FROM Cats c 
WHERE NOT 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 ANTISEMIJOIN Cláusula para hacer uniones antisemi derecha e izquierda. Es decir, puede usar LEFT ANTISEMIJOIN o RIGHT ANTISEMIJOIN .