mysql报错You can't specify target table 'b' for update in FROM clause

来源:互联网 发布:心事谁人知闽南语翻译 编辑:程序博客网 时间:2024/06/05 22:56

mysql使用update
UPDATE zt_project b SET b.deleted=’1’ WHERE b.id IN
(SELECT p.id FROM zt_projectproduct pp, zt_project p WHERE pp.product IN (20) AND p.id = pp.project AND p.deleted = ‘0’)

报错:
You can’t specify target table ‘b’ for update in FROM clause

原因分析:
mysql不能先select出同一表中的某些值,再update/delete这个表(在同一语句中)。oracle不会出现此问题。

解决方案一:
UPDATE zt_project b SET b.deleted=’1’ WHERE b.id IN (SELECT id FROM
(SELECT p.id FROM zt_projectproduct pp, zt_project p WHERE pp.product IN (20) AND p.id = pp.project AND p.deleted = ‘0’) tmp)
将查询结果塞在临时表中

解决方案二:
CREATE TABLE tmp AS SELECT MIN(id) AS col1 FROM blur_article GROUP BY title;
DELETE FROM blur_article WHERE id NOT IN (SELECT col1 FROM tmp);
DROP TABLE tmp;
新建临时表,存储数据,用完后删除。

阅读全文
0 0
原创粉丝点击