Můžete použít EXCEPT
operátor.
Kontakty prvního stupně:
SELECT contact_2 FROM contact WHERE contact_1 = 'gulsah'
Kontakty druhého stupně, kteří nejsou kontakty prvního stupně:
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
říká SQL serveru, aby vrátil všechny výsledky z prvního SELECT
které se NEzobrazují ve druhém SELECT
.
Pro kontakty třetího stupně (které nejsou kontakty prvního nebo druhého stupně):
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'
)
Nedělám velké naděje na výkon, ale to si samozřejmě budete muset ověřit sami.
Jako vedlejší poznámka:
I can select mutual contacts but I guess it is not the right approach.
Použijte INTERSECT
za to.