如何在数据库中使用?sql命令查询数据表中的重复记录并删除多余的重复记录?
上表test,有两个字段id和content,共有7条记录,可以看到id=1、2、3时,content字段值都是aaa,id=6、7时,content字段值为eee。
查询content字段的所有记录都有相同的记录
假如要找出来content重复记录字段值,sql命令可以按下面的代码,这样发现的结果将单次显示重复记录,默认显示较小id记录:
select * from test where id in (select id from test group by content having count(content) > 1)
显示所有重复数据,可使用以下数据sql语句:
select * from test where content in (select content from test group by content having count(content) > 1);
也可以用下面的sql句子显示记录重复次数:
Select content,Count(*) From test Group By content Having Count(*) > 1;
删除content多余的记录重复字段内容
执行下面的sql句子可以删除前表test里面的多余的重复记录,仅保留id最大重复记录。
DELETE FROM testWHERE id NOT IN(SELECT nd.i FROM (SELECT MAX(id) as i FROM test GROUP BY content HAVING COUNT(*) > UNION SELECT MAX(id) as i FROM test GROUP BY content HAVING COUNT(*) = 1) as nd )
sql语句解释:
主要代码如下:
下面的nd临时表别名,i是临时字段别名,以下是as可以省略,不影响命令的执行。
SELECT nd.i FROM (SELECT MAX(id) as i FROM test GROUP BY content HAVING COUNT(*) > UNION SELECT MAX(id) as i FROM test GROUP BY content HAVING COUNT(*) = 1) as nd
我们现在数据库里面执行,可以看到这段代码主要是将content内容重复的id排除,剩下的就重新完成了。id3、4、5、7,保留id最大重复记录: