sql >> Databáze >  >> RDS >> Sqlserver

SQL Server:jak vybrat kontakty prvního, druhého a třetího stupně

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.



  1. speciální znaky v dotazu SQL

  2. Import textu do MySQL:podivný formát

  3. Nejčastější chyby, kterým je třeba se vyhnout při replikaci MySQL

  4. MariaDB ROW_COUNT() Vysvětleno