Mysql选择N个X重复,省略1个重复

时间:2017-06-05 16:43:43

标签: mysql

考虑此表:

+-----+--------+
| id  | value  |
+-----+--------+
|  1  |   22   |
+-----+--------+
|  2  |   12   |
+-----+--------+
|  3  |   22   |
+-----+--------+
|  4  |   22   |
+-----+ -------+

我可以选择列value重复的所有内容,如下所示:

select value from table having count(value) > 1 ; 

这将输出Ids 1,3和4。

我尝试做的是选择重复的地方,但是留下1(一)个未选中的副本,所以上面只输出Ids 3和4(或1和3等等)。 。重复省略无关紧要,只有它是。

我怎样才能做到这一点?

这个问题不是

的重复
  

Using LIMIT within GROUP BY to get N results per group?

2 个答案:

答案 0 :(得分:0)

您可以使用聚合函数来过滤id的值,并选择所有其他的

  select * from table 
  where (value, id) not in (
      select value, max(id) 
      from table 
      group by value 
      having count(value) > 1 
  )
  ; 

答案 1 :(得分:0)

你可以这样做:

select * 
 from test t1
where exists (select 1 
                from test t2 
               where t2.value = t1.value 
              having count(value)>1)
limit 2

OR:

select t1.* 
  from test t1 inner join
       (select value from test t2 having count(value)>1) t2
       on t1.value = t2.value
 limit 2;