删除多对多表(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);