考虑这张表:
我需要创建一个返回突出显示的行的 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)
输出:
| 身份证 | 联系我们 联系方式 | |----|----------------|-------------| | 1 | 1 | 2 | | 2 | 2 | 1 | | 4 | 3 | 4 | | 5 | 4 | 3 |
这是SQLFiddle演示