查找id中的条目重复的重复项

时间:2018-03-06 08:46:01

标签: mysql sql

id  class   count   day
 1    2       5      5
 2    2       4      5
 3    2       4      5
 3    2       4      5
 4    2       5      3
 4    1       5      3
 4    2       5      3

所以我有一个基于多列查找所有重复项的查询,但是,这也会返回id,而不是所有条目都是重复的。 在上面的示例中,查询应该只显示/计数id 3,因为所有id为3的条目都是重复的。尽管id 4也有重复,但它不应该显示,因为它有另一个唯一的条目。

知道怎么做吗?

4 个答案:

答案 0 :(得分:1)

如果您需要包含id的行,其中没有行具有相同的id和唯一行值,请使用NOT INHAVING

select *
from your_table t1
where t1.id not in(
  select id
  from your_table
  group by id, class, count, day
  having count(*) = 1
)

答案 1 :(得分:1)

您可以使用此查询:http://sqlfiddle.com/#!9/1a2536/8

select id
from test
group by id 
having count(distinct id,class,count,day) = 1 and count(*)>1

如果不同的总数为1且总行数为>,则按ID对每行进行分组并计算该组具有的行数。 1,此id只有重复的行。

答案 2 :(得分:-1)

这很容易,快速说明一下,列出一个列数非常糟糕:

    SELECT id, class, `count`,day, COUNT(*)
    FROM myTable
    GROUP BY id, class, `count`,day
    HAVING COUNT(*) > 1

编辑:我误解了这个问题所以这是我的解决方案:

SELECT test.id, test.class, test.count, test.day , count(*), t.countID
FROM (SELECT id, Count(id) AS countID FROM test GROUP BY id ) t
INNER JOIN test on t.id = test.id
GROUP BY test.id, test.class, test.count, test.day
HAVING Count(*) > 1 AND t.countID = count(*)

答案 3 :(得分:-1)

我想出了这个:

SELECT *
FROM   (SELECT id,
               Count(id) AS matched
        FROM   test
        GROUP  BY id,
                  class,
                  count,
                  day) t
GROUP  BY id , matched
HAVING Count(id) = 1
       AND matched >= 2 

可能有一种更有效的方法,但这种方式更容易理解,首先我们按每列分组来查找重复数据。然后,第一部分消除了实际上具有不同变体的条目,然后我们只保留实际上只有重复的行。

编辑:与“only_full_group_by”模式兼容