一句话笔记-20221024

删除 MySQL 表中重复行

两种思路:

  • 重建表
  • 删除重复行

重建表

重建表使用 INSERT INTO ... SELECT ...语句。具体流程则是:

  1. 创建新表;
  2. INSERT INTO ... SELECT ...;
  3. 删除老表并重全名新表为老表名字。

所以将核心转化成了步骤 2 中如何去重。这里有两种:SELECT DISTINCTGROUP BY

DISTINCT

1
2
INSERT INTO xxx_copy (name, email)
SELECT DISTINCT name, email FROM xxx;

GROUP BY

1
2
INSERT INTO xxx_copy (name, email)
SELECT name, email FROM xxx GROUP BY name, email;

删除重复行

删除重复行核心就是要找出重复的行:

  • 使用 INNER JOIN;
  • MySQL 8 以后还可使用 row_number() over (partition by ...)

INNER JOIN

1
2
delete from xxx where id in (select t1.id from xxx t1 inner join xxx t2
WHERE t1.id < t2.id AND t1.name = t2.name);

ROW_NUMBER

1
2
delete from xxx where id in (select id, name, row_number() over (partition by name order by id)
from xxx);

一句话笔记-20221024
https://blog.isnap.cn/posts/84939ceb/
作者
三岁于辛
发布于
2022年10月24日
许可协议