Sie könnten den EXCEPT
verwenden Betreiber.
Kontakte ersten Grades:
SELECT contact_2 FROM contact WHERE contact_1 = 'gulsah'
Kontakte zweiten Grades, die keine Kontakte ersten Grades sind:
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
weist den SQL-Server an, alle Ergebnisse des ersten SELECT
zurückzugeben die NICHT im zweiten SELECT
erscheinen .
Für Kontakte dritten Grades (die keine Kontakte ersten oder zweiten Grades sind):
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'
)
Ich habe keine großen Hoffnungen auf Leistung, aber das müssen Sie natürlich selbst überprüfen.
Als Randbemerkung:
I can select mutual contacts but I guess it is not the right approach.
Verwenden Sie INTERSECT
dafür.