Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zrobić LEWE SEMI JOIN w SQL Server

LEFT SEMI JOIN jest rodzajem półzłącza. Zwraca wszelkie odrębne wartości, które są zwracane przez zapytanie po lewej i prawej stronie zapytania.

Jednak podczas używania T-SQL w SQL Server, jeśli spróbujesz jawnie użyć LEFT SEMI JOIN w zapytaniu prawdopodobnie otrzymasz następujący błąd:

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

Na szczęście T-SQL zawiera INTERSECT operator, który pozwala nam wykonać LEFT SEMI JOIN .

Kiedy używasz INTERSECT operator, pojawia się w planie wykonania zapytania jako LEFT SEMI JOIN .

Możesz także skonstruować podzapytanie, które robi to samo.

Przykład

Wyobraź sobie, że mamy dwa stoły; Cats i Dogs , a następnie uruchamiamy następujące zapytanie:

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

To zapytanie używa INTERSECT operatora i dlatego pojawi się jako LEFT SEMI JOIN w planie wykonawczym.

Jest to podobne do wykonywania następujących czynności:

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

Oto plan wykonania tego zapytania:

Jeśli używasz języka U-SQL z Azure Data Lake Analytics, możesz użyć SEMIJOIN klauzula wykonywania prawych i lewych sprzężeń semi. Oznacza to, że możesz użyć LEFT SEMIJOIN lub RIGHT SEMIJOIN .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Monitoruj bazę danych SQL przez SP_WhoIsActive lub FogLight | Rozwiązywanie problemów z wydajnością serwera SQL -1

  2. SQL:Zaktualizuj wiersz i zwróć wartość kolumny za pomocą 1 zapytania

  3. Nie można wstawić jawnej wartości dla kolumny tożsamości w tabeli „tabela”, gdy IDENTITY_INSERT jest ustawione na OFF

  4. Co powinieneś wiedzieć o funkcji NOCHECK podczas włączania ograniczenia CHECK w SQL Server

  5. Jak możemy wyświetlić treść zaszyfrowanej procedury składowanej w programie SSMS?