sql >> データベース >  >> RDS >> Sqlserver

SQL Server:1次、2次、3次の連絡先を選択する方法

    EXCEPTを使用できます 演算子。

    一次連絡先:

    SELECT contact_2 FROM contact WHERE contact_1 = 'gulsah'
    

    1度の連絡先ではない2度の連絡先:

    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 最初のSELECTからのすべての結果を返すようにSQLサーバーに指示します 2番目のSELECTには表示されません 。

    3度の連絡先(1度または2度の連絡先ではない)の場合:

    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を使用する このため。



    1. sys.dm_exec_requestsの基本

    2. MySQL:主キーとしてDATETIMEを使用

    3. ストラップデータベース.js/複数のデータベース構成

    4. EntityFrameworkがテンポラルテーブルで機能しない