我需要一个select命令来执行以下操作:
我有一张这样的表
ID | col1 | col2 | col3 | colN | ...
23 | asf | slf | rrr | ... | ...
23 | asf | slf | rrr | ... | ...
59 | asf | 567 | rrr | ... | ...
59 | asf | gh1 | rrr | ... | ...
02 | la1 | slf | rrr | ... | ...
02 | la1 | slf | rrr | ... | ...
总共有2行具有相同的ID。现在我想选择这些,在某些特定的其他列(此处为col1,col2,col3)中也有相同的条目,但不一定在其他列中。
作为示例的结果,我希望有这个
23 | asf | slf | rrr | ... | ...
23 | asf | slf | rrr | ... | ...
02 | la1 | slf | rrr | ... | ...
02 | la1 | slf | rrr | ... | ...
答案 0 :(得分:0)
这些表有一个主键,它在所有元组中都是唯一的吗?在这种情况下,您可以进行简单的自我加入:
SELECT e1.* FROM entities e1
INNER JOIN entities e2 ON
e1.pkey != e2.pkey
AND e1.ID = e2.ID
AND e1.col1 = e2.col1
AND e1.col2 = e2.col2
AND e1.col3 = e2.col3;
另一种选择是聚合:
SELECT * FROM entities WHERE ID IN (
SELECT ID FROM entities GROUP BY ID, col1, col2, col3
HAVING count(*) > 1)
答案 1 :(得分:0)
使用此查询:
从测试中选择*,其中id为
(从测试中选择a.id
内部联接测试b
on(a.id,a.col1,a.col2,a.col3)=(b.id,b.col1,b.col2,b.col3)
分组(a.id)
从测试c中计算(
*
)>(选择计数(*
)其中c.id = a.id))
<强> SQLfiddle 强>