-- 删除表中重复的记录,只保留一条
-- 假设我们有一个名为 'my_table' 的表,其中 'id' 是主键,'column1' 是可能存在重复值的列
-- 方法 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 语句 (适用于 MySQL 8.0+)
DELETE t1 FROM my_table t1
INNER JOIN my_table t2
WHERE t1.id > t2.id AND t1.column1 = t2.column1;
-- 方法 3: 使用 ROW_NUMBER() 窗口函数 (适用于 MySQL 8.0+)
WITH CTE AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY column1 ORDER BY id) AS rn
FROM my_table
)
DELETE FROM my_table
WHERE id IN (SELECT id FROM CTE WHERE rn > 1);
-- 解释:
-- 方法 1: 创建一个临时表来存储唯一记录,然后清空原表并将唯一记录重新插入。
-- 方法 2: 使用自连接删除重复记录,保留最小的 id。
-- 方法 3: 使用窗口函数为每组重复记录分配行号,删除行号大于 1 的记录。
上一篇:mysql tinytext
下一篇:mysql 日期加一天
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站