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)