在MySQL中获取准确的重复行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在MySQL中获取准确的重复行相关的知识,希望对你有一定的参考价值。

我正在寻找mysql中完全重复的内容。有很多列,每行大约30-40列。似乎有一些重复的行,我想识别它们。有很多记录。

有没有办法让MySQL返回所有重复的行,每个列都相同,没有列出并创建列出每列的查询?

答案

我想确认一下

你不能。您只能通过唯一(或主要)键标识行。但如果你有,那就没有任何确切的重复。

但是 - 如果您真的不想列出所有列,则可以创建表的临时副本并添加AUTO_INCREMENT PRIMARY KEY。那么NATURAL JOINGROUP BYCOUNT的组合将返回重复的行:

drop table if exists my_duplicates;
create table my_duplicates (c1 int, c2 int, c3 int);
insert into my_duplicates(c1, c2, c3)values
    (1,1,1),
    (1,2,3),
    (4,5,6),
    (1,2,3);

drop temporary table if exists tmp;
create temporary table tmp as select * from my_duplicates;
alter table tmp add column row_number int auto_increment primary key;

select tmp.*
from tmp
natural join my_duplicates
group by tmp.row_number
having count(*) > 1

结果:

c1 | c2 | c3 | row_number
---|----|----|-----------
 1 |  2 |  3 |          2
 1 |  2 |  3 |          4

但是:ぁzxswい

Update

如果您有主键列,则可以执行相反的操作:创建表的副本并将主键列放在副本表中。然后你有与上面相同的情况 - 你只需要在查询中切换表。

http://rextester.com/COQA38406

以上是关于在MySQL中获取准确的重复行的主要内容,如果未能解决你的问题,请参考以下文章

在MySQL中获取多个用户的最后2行[重复]

在 MySQL 5.7 中获取最高分数和最高分数行中的字段 [重复]

如何用ffmpeg截取视频片段&截取时间不准确的坑

使用 PDO 插入时获取自动递增行 ID [重复]

在 MySQL 中按多列获取重复行

如何获取 MySQL 中最后更新行的 ID?