今天遇到一個歷史導入數據重復的問題,於是要刪除重復的記錄,一開始想用子查詢的方式找到要刪除記錄的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的條件過濾出多余的重復記錄進行刪除。
"笨,是一種高級的情商,所謂學會笨一點,就是不懂的事不要瞎做,不明白的話不要亂說。"