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

SQL Server:cách chọn địa chỉ liên hệ cấp độ thứ nhất, thứ hai và thứ ba

Bạn có thể sử dụng EXCEPT nhà điều hành.

Địa chỉ liên hệ cấp độ đầu tiên:

SELECT contact_2 FROM contact WHERE contact_1 = 'gulsah'

Địa chỉ liên hệ cấp độ hai không phải là địa chỉ liên hệ cấp độ một:

SELECT
  contactB.contact_2
FROM 
  contact AS contactB
  INNER JOIN contact AS contactA ON contactA.contact_2=contactB.contact_1
WHERE contactA.contact_1 = 'gulsah'
EXCEPT
SELECT contact_2 FROM contact WHERE contact_1 = 'gulsah'

EXCEPT yêu cầu máy chủ SQL trả lại tất cả kết quả từ SELECT đầu tiên KHÔNG xuất hiện trong SELECT thứ hai .

Đối với địa chỉ liên hệ cấp ba (không phải là liên hệ cấp một hoặc cấp hai):

SELECT
  contactC.contact_2
FROM 
  contact AS contactC
  INNER JOIN contact AS contactB ON contactB.contact_2=contactC.contact_1
  INNER JOIN contact AS contactA ON contactA.contact_2=contactB.contact_1
WHERE contactA.contact_1 = 'gulsah'
EXCEPT
(
SELECT contact_2 FROM contact WHERE contact_1 = 'gulsah'
UNION
SELECT
  contactB.contact_2
FROM 
  contact AS contactB
  INNER JOIN contact AS contactA ON contactA.contact_2=contactB.contact_1
WHERE contactA.contact_1 = 'gulsah'
)

Tôi không hy vọng cao về hiệu suất, nhưng tất nhiên bạn sẽ cần phải tự mình kiểm tra điều này.

Như một lưu ý phụ:

I can select mutual contacts but I guess it is not the right approach.

Sử dụng INTERSECT cho điều này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhập / Xuất cơ sở dữ liệu với SQL Server Management Studio

  2. Máy chủ Sql - Nhận Id của các hàng được tổng hợp

  3. BẬT là một phần của cú pháp

  4. Có bất kỳ nhược điểm nào khi sử dụng NewSequentialID không?

  5. COT () Ví dụ trong SQL Server