sql >> Database >  >> RDS >> Sqlserver

SQL Server:hoe eerste-, tweede- en derdegraads contacten te selecteren

Je zou de EXCEPT . kunnen gebruiken telefoniste.

Eerstegraads contacten:

SELECT contact_2 FROM contact WHERE contact_1 = 'gulsah'

Tweedegraads contacten die geen eerstegraads contacten zijn:

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 vertelt SQL-server om alle resultaten van de eerste SELECT . te retourneren die NIET verschijnen in de tweede SELECT .

Voor derdegraads contacten (die geen eerste- of tweedegraads contacten zijn):

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'
)

Ik heb geen hoge verwachtingen van de prestaties, maar dit moet u natuurlijk zelf controleren.

Even terzijde:

I can select mutual contacts but I guess it is not the right approach.

Gebruik INTERSECT hiervoor.



  1. Oracle SQl Dev, hoe het aantal weekdagen tussen 2 datums te berekenen

  2. Linq-query gedraagt ​​zich niet zoals verwacht

  3. Hoe de tijdzone voor Postgres 9.4 permanent in te stellen

  4. Wat is de tijdseenheid in MySQL's slow-query log?