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

删除多对多表(Mysql)上的重复行,mysql,duplicates,duplicate-removal,Mysql,Duplicates,Duplicate Removal,我有一张多对多的桌子,我的桌子看起来像这样 +----+--------+ | Customers | +----+--------+ | id | name | +----+--------+ | 1 | john | | 1 | john | | 1 | james | | 2 | george | | 2 | michael| +----+--------+ 我想要的是删除同名的重复行。查看一下不幸的是,您无法区分一行和另一行。因此,最简单的方法是临时表方法:

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

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

我想要的是删除同名的重复行。

查看一下

不幸的是,您无法区分一行和另一行。因此,最简单的方法是临时表方法:

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;

Gordon Linoff的答案有一个小小的变化,就是避免使用“Insert-in”和“Rename table”,并使查询可以在任何表上工作

解决方案-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:添加唯一索引(建议使用,因为这样可以防止在表中创建重复项)


您想从表中删除它们还是只查询并查看一次?@GordonLinoff我只想删除它们并清理我的表。您没有主键。这可能是一个问题你提到的“最简单的方法”还有其他方法吗?只是好奇。@隐姓埋名。我想到的是修改表,添加一列,将该列设置为每行中唯一的值,然后删除除最小值或最大值以外的所有值。
ALTER IGNORE TABLE table_name ADD UNIQUE INDEX u_id (id,name);