Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como fazer um LEFT SEMI JOIN no SQL Server


Um LEFT SEMI JOIN é uma espécie de meia-junção. Ele retorna quaisquer valores distintos que são retornados pela consulta nos lados esquerdo e direito da consulta.

No entanto, ao usar o T-SQL no SQL Server, se você tentar usar explicitamente LEFT SEMI JOIN em sua consulta, você provavelmente receberá o seguinte erro:
Msg 155, Level 15, State 1, Line 4
'SEMI' is not a recognized join option.

Felizmente, o T-SQL inclui o INTERSECT operador, que nos permite realizar um LEFT SEMI JOIN .

Quando você usa o INTERSECT operador, ele aparece no plano de execução da consulta como um LEFT SEMI JOIN .

Você também pode construir uma subconsulta que faça a mesma coisa.

Exemplo


Imagine que temos duas tabelas; Cats e Dogs , e então executamos a seguinte consulta:
SELECT 
    CatName AS PetName
FROM Cats
INTERSECT
SELECT 
    DogName AS PetName
FROM Dogs;

Esta consulta usa o INTERSECT operador e, portanto, aparecerá como um LEFT SEMI JOIN no plano de execução.

É semelhante a fazer o seguinte:
SELECT 
    DISTINCT CatName
FROM Cats c 
WHERE EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);

Aqui está o plano de execução para essa consulta:

Se você usa U-SQL com Azure Data Lake Analytics, pode usar o SEMIJOIN cláusula para fazer semijunções direita e esquerda. Ou seja, você pode usar LEFT SEMIJOIN ou RIGHT SEMIJOIN .