-- 删除重复数据,保留一个
-- 假设我们有一个表名为 `my_table`,其中有一列 `id` 和一列 `name`,我们想要删除 `name` 列中重复的数据,只保留一条记录。
-- 方法1:使用子查询和临时表
CREATE TEMPORARY TABLE temp_table AS
SELECT DISTINCT * FROM my_table;
TRUNCATE TABLE my_table;
INSERT INTO my_table
SELECT * FROM temp_table;
DROP TEMPORARY TABLE temp_table;
-- 解释:这种方法通过创建一个临时表来存储唯一的数据,然后清空原表并重新插入唯一的数据。
-- 方法2:使用 DELETE 语句结合 GROUP BY 和 ROW_NUMBER()
DELETE t1 FROM my_table t1
INNER JOIN my_table t2
WHERE t1.id > t2.id AND t1.name = t2.name;
-- 解释:这种方法通过自连接表,删除 `id` 较大的重复记录,保留 `id` 最小的记录。
-- 方法3:使用窗口函数(适用于 MySQL 8.0+)
WITH cte AS (
SELECT id, name, ROW_NUMBER() OVER (PARTITION BY name ORDER BY id) AS rn
FROM my_table
)
DELETE FROM my_table
WHERE id IN (SELECT id FROM cte WHERE rn > 1);
-- 解释:这种方法使用窗口函数为每一组 `name` 分配行号,然后删除行号大于1的记录。
上一篇:mysql for update
下一篇:mysql时间格式转换
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站