前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

报错如题,意思大致是:在一条 sql 语句中不能先查出来部分内容,再同时又对当前表作修改。

解决方法:给查询加别名,用中间表来实现不是对同一表作操作。

如错误定法:

UPDATE xxx_department 
SET rank = '2'  
WHERE aaa_id in (SELECT id FROM xxx_department WHERE aaa_id IS NULL) ;

改后的写法:

UPDATE xxx_department 
SET rank = '2'  
WHERE aaa_id in 
 (SELECT * FROM (SELECT id FROM xxx_department WHERE aaa_id IS NULL) a );

 

----------------- 我 是 傻 傻 的 分 隔 线 -----------------

2019. 4.3 后记 :

今天在评论中看到另一方法,特别记录一下。(再度感谢这位愿意在评论中分享解决方法的朋友)

-- sql 原写法:
 
   update x set xxx_xxrial_id = null where id not in 
    (select id from x where ccc_info = 1);

 
-- 使用 left join 改写为自链接方式:

    update x left join
       x a
       on x.id = a.id and a.ccc_info = 1
    set xxx_xxrial_id = null
    where a.id is null;

此方法出处:https://stackoverflow.com/questions/51087937/on-update-mysql-row-you-cant-specify-target-table-x-for-update-in-from-claus

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐