今天遇到一个历史导入数据重复的问题,于是要删除重复的记录,一开始想用子查询的方式找到要删除记录的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的条件过滤出多余的重复记录进行删除。
"笨,是一种高级的情商,所谓学会笨一点,就是不懂的事不要瞎做,不明白的话不要乱说。"