MySQL根據多個字段刪除重復數據(保留一條) 在成千上萬條數據中,存在着一些相同的記錄,該如何用SQL語句來刪除掉重復的呢 話不多說直接上代碼 DELETE FROM 表名 WHERE S_ID IN ( SELECT S_ID FROM 表名 A, ( SELECT 字段 1, 字段 2 FROM 表名 GROUP BY 字段 1, 字段 2 HAVING COUNT(*) > 1 ) B WHERE A.字段 1 = B.字段 1 AND A.字段 2 = B.字段 2 AND A.S_ID NOT IN ( SELECT MIN( S_ID ) AS ID FROM 表名 GROUP BY 字段 1, 字段 2, 字段 3 HAVING COUNT(*) > 1 ) );
//出現報錯 1093 - You can't specify target table 'student_info' for update in FROM clause
意思很顯而易見了,說不能對進行查詢操作的表進行update操作,也就說我們的where條件中進行了子查詢,並且子查詢也是針對需要進行update操作的表的,mysql不支持這種查詢修改的方式。
解決方法
上網查了一下,針對這種問題可以通過”繞”的方式進行實現,下面看sql語句
DELETE FROM student_info WHERE student_id IN ( select m.student_id from (SELECT student_id FROM student_info A, ( SELECT student_name,class_name,home_address FROM student_info GROUP BY student_name,class_name,home_address HAVING COUNT(*) > 1 ) B WHERE A.student_name = B.student_name AND A.class_name = B.class_name and A.home_address=B.home_address AND A.student_id NOT IN ( SELECT MIN( student_id ) AS ID FROM student_info GROUP BY student_name,class_name,home_address HAVING COUNT(*) > 1 )) m )