在MySQL中获取完全重复的行

在MySQL中获取完全重复的行,mysql,phpmyadmin,Mysql,Phpmyadmin,我在MySQL中寻找完全重复的内容。有很多列,每行大约有30-40个长列。似乎有一些重复的行,我想识别它们。有很多记录 有没有办法让MySQL返回所有重复的行,其中每一列都是相同的,而不列出并创建一个列出每一列的查询 我想确定他们的身份 你不能。只能通过唯一(或主键)键标识行。但如果你有,就不会有任何精确的复制品 但是,如果确实不想列出所有列,可以创建表的临时副本并添加自动递增主键。然后,自然联接、分组依据和计数的组合将返回重复的行: drop table if exists my_duplic

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

有没有办法让MySQL返回所有重复的行,其中每一列都是相同的,而不列出并创建一个列出每一列的查询


我想确定他们的身份

你不能。只能通过唯一(或主键)键标识行。但如果你有,就不会有任何精确的复制品

但是,如果确实不想列出所有列,可以创建表的临时副本并添加自动递增主键。然后,
自然联接
分组依据
计数
的组合将返回重复的行:

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
演示:

更新 如果有主键列,则可以执行相反的操作:复制表并将主键列放到复制表中。然后,您会遇到与上面相同的情况—只需要切换查询中的表

drop table if exists my_duplicates;
create table my_duplicates (id int auto_increment primary key, 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 drop column id;

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

你能发布一些你的数据样本以便我们进一步调查吗?在没有看到表和数据的情况下,这个问题似乎太模糊了。不,但是你不喜欢键入,即使是MySQL workbench也可以给你一个完整的选择作为起点。“我想确定它们”-你不能。只能通过唯一(或主键)键标识行。但是如果你有,就不会有任何精确的重复。那不是也会将行连接到它们自己吗?对不起@PaulSpiegel你是对的,我想它们不是完全重复的,因为我已经有了一个主键自动递增。这会更容易吗?@Skintest-好吧,通过PK你至少可以识别行。但是要找到重复的行(不列出所有列),你需要做同样的事情。谢谢@PaulSpiegel仍在研究这个问题,但会接受你的答案,因为它帮助我更好地理解了这一点