SQL:检查特定列中相同条目的行

时间:2014-01-06 14:35:46

标签: mysql sql select

我需要一个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  | ...  | ...

2 个答案:

答案 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