删除数据库中的重复记录
数据库中存在重复记录分为两种:1. 某些字段的值相同
2. 所有字段的值相同
对于第一种,可以采用连接的方式,条件是这些字段的值相同,并且其它字段的值大于或小于对应字段的值(只能取一种,等于表示同一条记录)
Table result
idnamecourse score
1 JohnBiology 90
2 JohnBiology 90
3 LisaChemistry 80
4 JohnBiology 90
查询所有的重复记录:
SELECT * FROM result a WHERE (a.name, a.course) IN(SELECT b.name, b.course FROM result b GROUP BY b.name, b.course HAVING COUNT(*) > 1)
查询多余的重复记录:
SELECT * FROM result a WHERE EXISTS (SELECT 1 FROM result b WHERE a.name=b.name AND a.course=b.course AND a.id > b.id)
删除多余的重复记录:
DELETE FROM result a WHERE EXISTS (SELECT 1 FROM result b WHERE a.name=b.name AND a.course=b.course AND a.id > b.id)
对于第二种,不同的数据库有不同的解决方案,SQL Server是用DISTINCT关键字,Oracle是ROWID
Table result
idnamecourse score
1 JohnBiology 90
1 JohnBiology 90
2 LisaChemistry 80
1 JohnBiology 90
SQL Server
删除多余的重复记录:
CREATE TABLE #tmp AS SELECT DISTINCT * FROM result;TRUNCATE TABLE result;INSERT INTO result SELECT * FROM #tmp;
Oracle
查询多余的重复记录:
SELECT * FROM result a WHERE a.ROWID > (SELECT MIN(ROWID) FROM result b WHERE a.id=b.id AND a.name=b.name AND a.course=b.course)
删除多余的重复记录:
DELETE FROM result a WHERE a.ROWID > (SELECT MIN(ROWID) FROM result b WHERE a.id=b.id AND a.name=b.name AND a.course=b.course)
页:
[1]