Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách thực hiện THAM GIA MẶT BẰNG TRÁI trong SQL Server

LEFT SEMI JOIN là loại tham gia một nửa. Nó trả về bất kỳ giá trị khác biệt nào được trả về bởi cả truy vấn ở bên trái và bên phải của truy vấn.

Tuy nhiên, khi sử dụng T-SQL trong SQL Server, nếu bạn cố gắng sử dụng rõ ràng LEFT SEMI JOIN trong truy vấn của mình, có thể bạn sẽ gặp lỗi sau:

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

May mắn thay, T-SQL bao gồm INTERSECT , cho phép chúng tôi thực hiện LEFT SEMI JOIN .

Khi bạn sử dụng INTERSECT , nó xuất hiện trong kế hoạch thực thi truy vấn dưới dạng LEFT SEMI JOIN .

Bạn cũng có thể tạo một truy vấn con thực hiện điều tương tự.

Ví dụ

Hãy tưởng tượng chúng ta có hai bảng; CatsDogs và sau đó chúng tôi chạy truy vấn sau:

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

Truy vấn này sử dụng INTERSECT và do đó nó sẽ xuất hiện dưới dạng LEFT SEMI JOIN trong kế hoạch thực hiện.

Nó tương tự như làm như sau:

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

Đây là kế hoạch thực thi cho truy vấn đó:

Nếu bạn sử dụng U-SQL với Azure Data Lake Analytics, bạn có thể sử dụng SEMIJOIN mệnh đề để thực hiện phép nối bán phải và trái. Đó là, bạn có thể sử dụng LEFT SEMIJOIN hoặc 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. Làm thế nào để thực hiện một GROUP BY phân biệt chữ hoa chữ thường?

  2. Cách tách cửa sổ truy vấn trong SQL Server Management Studio (SSMS) - SQL Server / TSQL Hướng dẫn Phần 13

  3. Chuỗi phân tách T-SQL dựa trên dấu phân cách

  4. Làm cách nào để tôi có thể bước vào một chương trình SQL Server được lưu trữ từ mã C # của tôi?

  5. SYSDATETIME () so với GETDATE () trong SQL Server:Sự khác biệt là gì?