आप EXCEPT
. का उपयोग कर सकते हैं ऑपरेटर।
प्रथम श्रेणी के संपर्क:
SELECT contact_2 FROM contact WHERE contact_1 = 'gulsah'
दूसरे दर्जे के संपर्क जो पहले दर्जे के संपर्क नहीं हैं:
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
SQL सर्वर को पहले SELECT
. से सभी परिणाम वापस करने के लिए कहता है जो दूसरे SELECT
. में दिखाई नहीं देते ।
थर्ड-डिग्री कॉन्टैक्ट्स के लिए (जो फर्स्ट- या सेकेंड-डिग्री कॉन्टैक्ट नहीं हैं):
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'
)
मुझे प्रदर्शन के लिए उच्च उम्मीदें नहीं हैं, लेकिन निश्चित रूप से आपको इसे स्वयं जांचना होगा।
एक साइड नोट के रूप में:
I can select mutual contacts but I guess it is not the right approach.
INTERSECT
का उपयोग करें इसके लिए।