SQL语句删除重复记录的方法详解

SQL中,可以使用以下几种方法删除重复记录:

1. 使用DISTINCT关键字:

SELECT DISTINCT * FROM table_name;

这将选择table_name表中所有列的唯一组合记录。

2. 使用GROUP BY与HAVING:

SELECT * 
FROM table_name
GROUP BY column1, column2  -- 分组依据
HAVING COUNT(*) > 1       -- 重复记录数 > 1

这将选择列column1和column2相同的记录组中,记录数>1的重复记录。

3. 使用ROW_NUMBER() OVER()与DELETE:

WITH CTE AS 
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY column1, column2 ORDER BY column1) AS row_num 
FROM table_name
)
DELETE 
FROM CTE 
WHERE row_num > 1

这将为记录分配行号,行号>1的重复记录将被删除。

4. 利用自连接删除:

DELETE p1 
FROM table_name p1, table_name p2
WHERE 
    p1.column1 = p2.column1 
    AND p1.column2 = p2.column2
    AND p1.rowid > p2.rowid   -- 保留rowid小的记录 

这将删除列column1和column2值相同,且rowid值较大的重复记录。

5. CREATE UNIQUE INDEX后DELETE:

CREATE UNIQUE INDEX index_name ON table_name(column1, column2)
DELETE 
FROM table_name  
WHERE column1 IN 
(SELECT column1 
FROM table_name
GROUP BY column1, column2  
HAVING COUNT(*) > 1)

这首先创建唯一索引,然后删除索引列出现重复值的记录。这些是SQL中较为常用的删除重复记录的方法。根据实际需求,可以选择其中一种或几种方法进行重复记录的删除与去重操作。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论