MySQL查询根据两列中的值获取所有重复项

时间:2017-01-01 10:38:10

标签: mysql sql select key

执行时

select *, count(*) c 
FROM mytable 
GROUP BY col3, col4 
HAVING c > 1
order by col4, col3;

我期望获得任何值的行,在选择中,至少有两个等价物(col3,col4)。 但是我得到的结果只有一行出现一些col3值。有人可以解释一下原因吗?

换句话说,我正在尝试构建查询,以获取wichch所有行(col3,col4)不止一次出现。

意外结果的示例是:

id - col1 - col2 - col3 - col4 - c       
123- val1  val123   43   val444  2
456- val14  val52   45   val444  2

列col3中的43从未出现在结果中,但我希望如此。否则该行不应该在结果中。

正确,

select * from ukberu1m where col3=43 and col4=val444;

在原始表中给出两个结果,但在结果表中只有一行是由一厢情愿的标准显示的,而不是两个由于某种原因。

2 个答案:

答案 0 :(得分:2)

如果要查看具有重复项的所有行,而不是每个行的一个实例,则需要将查询与原始表联接。

SELECT t1.*
FROM mytable AS t1
JOIN (SELECT col3, col4
      FROM mytable
      GROUP BY col3, col4
      HAVING COUNT(*) > 1) AS t2
ON t1.col3 = t2.col3 AND t1.col4 = t2.col4
ORDER BY col4, col3

答案 1 :(得分:1)

假设每行id是唯一的,另一种方法是:

select t.*
from mytable t
where exists (select 1
              from mytable t2
              where t2.col3 = t.col3 and t2.col4 = t.col4 and t2.id <> t.id
             );

这种方法的优点是它可以很好地利用mytable(col3, col4)上的索引。