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.