sql server删除重复记录只保留一条

今天遇到一个历史导入数据重复的问题,于是要删除重复的记录,一开始想用子查询的方式找到要删除记录的id删除,后来发现DELETE语句可以直接用外连接,这样更加简单,效率也更高。

delete sys_project
from sys_project as aa
left join (
select min(id) as id from sys_project
group by sysCode
) as bb
on aa.id = bb.id
where bb.id is null

这里就是通过左外连接查询出按照sysCode分组的所有重复或不重复的记录组中的第一条记录(通过min(id)找出id最小的一条),如果左外连接没有匹配的记录,则左外连接的记录是空的,即可以通过bb.id is null的条件过滤出多余的重复记录进行删除。

"笨,是一种高级的情商,所谓学会笨一点,就是不懂的事不要瞎做,不明白的话不要乱说。"

上一篇:JFreeChart入门


下一篇:mysql 去除重复 Select中DISTINCT关键字的用法 在使用mysql时,有时需要查询出某个字段不重复的记录,虽然mysql提供 有distinct这个关键字来过滤掉多余的重复记录只保留一条,但往往只用它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct只能返回它的目标字段,而无法返回其它字段,这个问题让我困扰了很久,用distinct不能解决的话,