Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server:cara memilih kontak tingkat Pertama, Kedua dan Ketiga

Anda dapat menggunakan EXCEPT operator.

Kontak tingkat pertama:

SELECT contact_2 FROM contact WHERE contact_1 = 'gulsah'

Kontak tingkat dua yang bukan kontak tingkat pertama:

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 memberitahu SQL server untuk mengembalikan semua hasil dari SELECT pertama yang TIDAK muncul di SELECT second kedua .

Untuk kontak tingkat ketiga (yang bukan kontak tingkat pertama atau kedua):

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

Saya tidak terlalu berharap pada performa, tetapi tentu saja Anda perlu memeriksanya sendiri.

Sebagai catatan tambahan:

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

Gunakan INTERSECT untuk ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. bagaimana cara menampilkan hanya baris genap atau ganjil di sql server 2008?

  2. Apakah MERGE merupakan pernyataan atom dalam SQL2008?

  3. Bagaimana saya bisa menggunakan Date Datatype di sql server?

  4. Menjelajahi batasan yang berbeda di SQL Server

  5. Cara Mendapatkan Definisi Kolom Terhitung di SQL Server menggunakan T-SQL