mysql删除表重复数据

表数据量不大,不考虑效率,按oracle的方式写个删除sql:
DELETE FROM boss_t_mobile_version_partner WHERE id NOT IN (SELECT MIN(t.id) FROM `boss_t_mobile_version_partner` t
GROUP BY t.`partner_no`)


报错:
You can't specify target table 'boss_t_mobile_version_partner' for update in FROM clause

mysql 不支持 这种写法。。。
delete不能直接删除本表里面查出的子查询结果。

用惯了oracle,现在用mysql,发现还是有不少蹩脚的地方,使用方式、引擎、大数据处理、效率、资源利用的差距不断显现了。

解决方法一:
要先弄个临时表

改成这样可以:
CREATE TABLE tmp AS SELECT MIN(t.id) AS id FROM `boss_t_mobile_version_partner` t GROUP BY t.`partner_no`;
DELETE FROM boss_t_mobile_version_partner WHERE id NOT IN (SELECT id FROM tmp); 
DROP TABLE tmp;


解决方法二:
在子查询外面再套一层。
DELETE FROM boss_t_mobile_version_partner WHERE id NOT IN (SELECT r.id FROM (SELECT MIN(t.id) AS id FROM `boss_t_mobile_version_partner` t
GROUP BY t.`partner_no`) r)

你可能感兴趣的:(mysql)