1

次の表を検討してください。


ここに画像の説明を入力


強調表示された行を返す SQL クエリを作成する必要があります。つまり、idContactTo によって相互にリンクされている行です。

例: 1 には 2 への連絡先があり、2 には 1 への連絡先があります - それらはリンクされており、結果テーブルにあるはずです。しかし、1 が 3 と接触していても、3 が 1 と接触しているとは限りません。それらはリンクしていません。

4

2 に答える 2

4

あなたは、経由INNER JOINでそれを行うことができます

SELECT  a.*
FROM    tableName a
        INNER JOIN tableName b
            ON  a.idContantOwner = b.idContactTo AND
                b.idContantOwner = a.idContactTo
于 2013-09-05T03:23:11.817 に答える
1

それを行う別の方法

SELECT t.* 
  FROM 
(
  SELECT MiN(id) min_id, MAX(id) max_id
    FROM Table1
   GROUP BY LEAST(idContactOwner, idContactTo),
            GREATEST(idContactOwner, idContactTo)
  HAVING COUNT(*) = 2
) q JOIN Table1 t 
   ON t.id IN(q.min_id, q.max_id)

出力:

| | ID | IDCONTACTOWNER | IDCONTACTOWNER | IDCONTACTTO |
|----|----------------|-------------|
| | 1 | 1 | 2 |
| | 2 | 2 | 1 |
| | 4 | 3 | 4 |
| | 5 | 4 | 3 |

これがSQLFiddleのデモです

于 2013-09-05T03:25:32.157 に答える