首页 > 解决方案 > 查找在不同列上包含相同值的行

问题描述

用于查找哪些行在 2 行的两个不同列上包含相同值的表。这是 2k+ 行中的一个小样本行。

id      left    right     
1       3        4 
2       4        1
3       1        9
4       2        6
5       2        5
6       9        8
7       0        7

在上述情况下,我需要获得第 1,2,3,6 行,因为它在两行的两个不同列上包含 4,即 (id=1&2),1 在两行两列不同的列上 (id=1&3) 和 9在两个不同列的两行上(id=3&6)

我的想法:

我确实想过很多事情,例如左右列的交叉连接、分组和计数等。

标签: sqlgroup-bycount

解决方案


你可以这样做EXISTS

SELECT t1.*
FROM tablename t1
WHERE EXISTS (
  SELECT 1 FROM tablename t2
  WHERE t1.id <> t2.id AND (t2.left = t1.right OR t1.left = t2.right)
)

请参阅演示
结果:

ID 剩下 正确的
1 3 4
2 4 1
3 1 9
6 9 8

推荐阅读