Mysql单表删除重复记录
时间: 2024-12-11 10:43:07 浏览: 18
在MySQL中,如果你想要删除某个表中的重复记录并保留唯一的行,你可以使用`UNION ALL`结合`DISTINCT`或者`GROUP BY`和`HAVING COUNT(*) > 1`来筛选出重复项,然后通过`DELETE`语句删除它们。这里有一个基本的例子:
```sql
-- 方法一:使用UNION ALL + DISTINCT
CREATE TEMPORARY TABLE temp_table AS
SELECT column1, column2, ..., column_n
FROM your_table
UNION ALL
SELECT column1, column2, ..., column_n
FROM your_table
WHERE column1 IS NULL;
DELETE FROM your_table
USING temp_table
WHERE your_table.column1 = temp_table.column1 AND your_table.column2 = temp_table.column2 ...;
DROP TABLE temp_table;
-- 方法二:使用GROUP BY 和 HAVING
DELETE t1
FROM your_table t1
JOIN (
SELECT column1, column2, ..., column_n,
ROW_NUMBER() OVER (PARTITION BY column1, column2, ... ORDER BY NULL) as rn
FROM your_table
) t2
ON t1.column1 = t2.column1 AND t1.column2 = t2.column2 ...
WHERE t2.rn > 1;
```
请将`your_table`替换为你要操作的实际表名,并将`column1, column2, ...`替换为你的表中需要检查重复的列名。
注意操作前最好备份数据,因为这些删除操作是不可逆的。另外,这种方法可能会删除所有非唯一值的行,如果你想只删除第一个出现的重复行,可以调整`ORDER BY`子句。
阅读全文