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)

输出:

| 身份证 | 联系我们 联系方式 |
|----|----------------|-------------|
| 1 | 1 | 2 |
| 2 | 2 | 1 |
| 4 | 3 | 4 |
| 5 | 4 | 3 |

这是SQLFiddle演示

于 2013-09-05T03:25:32.157 回答