删除多对多表上的重复行(Mysql)

时间:2014-07-28 10:19:55

标签: mysql duplicates duplicate-removal

我有一张很多很多的桌子,我的桌子看起来像这样

+----+--------+
|  Customers  |
+----+--------+
| id | name   |
+----+--------+
| 1  | john   |
| 1  | john   |
| 1  | james  |
| 2  | george |
| 2  | michael|
+----+--------+

我想要的是删除具有相同名称的重复行。

3 个答案:

答案 0 :(得分:2)

不幸的是,你无法将一行与另一行区分开来。因此,最简单的方法是临时表方法:

create table temp as
    select distinct id, name
    from customers;

truncate table customers;

insert into customers(id, name)
    select id, name
    from temp;

drop table temp;

答案 1 :(得分:0)

答案 2 :(得分:0)

@Gordon Linoff回答的一个小变化是避免“插入”并执行“重命名表”并使查询在任何表格上工作。

解决方案-1:使用临时表

CREATE TABLE table_name_clean AS SELECT DISTINCT
    *
FROM
    table_name;

DROP TABLE table_name;

RENAME TABLE table_name_clean TO table_name;

解决方案-2:添加UNIQUE INDEX(推荐它会阻止在表格中创建重复的条目)

ALTER IGNORE TABLE table_name ADD UNIQUE INDEX u_id (id,name);