mysql重复数据删除

标签 mysql select duplicate-data

这显示了所有恰好有两个相同条目的名字和姓氏

SELECT `firstname`,`lastname`,COUNT(*) AS Count 
FROM `people` 
GROUP BY `firstname`,`lastname`
HAVING Count = 2

如何将其转换为带有 LIMIT 的 DELETE FROM WHERE 语句以仅删除每个条目中的一个并保留另一个条目。

好吧,这似乎是一种技术方法,我将在 php while 循环中完成它

最佳答案

您可以创建一个表,其中每个重复项都有 1 条记录:然后从 people 表中删除所有重复记录,然后重新插入重复记录。

-- Setup for example
create table people (fname varchar(10), lname varchar(10));

insert into people values ('Bob', 'Newhart');
insert into people values ('Bob', 'Newhart');
insert into people values ('Bill', 'Cosby');
insert into people values ('Jim', 'Gaffigan');
insert into people values ('Jim', 'Gaffigan');
insert into people values ('Adam', 'Sandler');

-- Show table with duplicates
select * from people;

-- Create table with one version of each duplicate record
create table dups as 
    select distinct fname, lname, count(*) 
    from people group by fname, lname 
    having count(*) > 1;

-- Delete all matching duplicate records
delete people from people inner join dups 
on people.fname = dups.fname AND 
   people.lname = dups.lname;

-- Insert single record of each dup back into table
insert into people select fname, lname from dups;

-- Show Fixed table
select * from people;

关于mysql重复数据删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2146938/

相关文章:

mysql - "where"或 "like"子句更适合使用索引

c - 如何在 ELF 文件中制作重复的部分

php - 消息为 'SQLSTATE[42S02]: Base table or view not found: 1932 Table ' bookstore.user 的“PDOException”在引擎中不存在

mysql - 执行 JOIN 时 MySQL 表大小是否重要?

mysql - 在 MYSQL 中获取第一个解锁行

mysql - 如何在相关子查询中使用别名?

mysql - 在主键上调用 SELECT * 与 SQL 中的属性

css - 选择时如何更改从 Material ui中选择的背景颜色?

r - R 中每多列的每个行名(1、2 或 A、B..)的最大值

mysql - 具有唯一约束的表有重复记录(MySQL 5.1.57)