Anda dapat menggunakan EXCEPT
operator.
Kontak tingkat pertama:
SELECT contact_2 FROM contact WHERE contact_1 = 'gulsah'
Kontak tingkat dua yang bukan kontak tingkat pertama:
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
memberitahu SQL server untuk mengembalikan semua hasil dari SELECT
pertama yang TIDAK muncul di SELECT
second kedua .
Untuk kontak tingkat ketiga (yang bukan kontak tingkat pertama atau kedua):
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'
)
Saya tidak terlalu berharap pada performa, tetapi tentu saja Anda perlu memeriksanya sendiri.
Sebagai catatan tambahan:
I can select mutual contacts but I guess it is not the right approach.
Gunakan INTERSECT
untuk ini.