次の表を検討してください。
強調表示された行を返す SQL クエリを作成する必要があります。つまり、idContactTo によって相互にリンクされている行です。
例: 1 には 2 への連絡先があり、2 には 1 への連絡先があります - それらはリンクされており、結果テーブルにあるはずです。しかし、1 が 3 と接触していても、3 が 1 と接触しているとは限りません。それらはリンクしていません。
あなたは、経由INNER JOIN
でそれを行うことができます
SELECT a.*
FROM tableName a
INNER JOIN tableName b
ON a.idContantOwner = b.idContactTo AND
b.idContantOwner = a.idContactTo
それを行う別の方法
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のデモです