mysql中错误:1093

编程入门 行业动态 更新时间:2024-10-08 18:40:33

mysql中<a href=https://www.elefans.com/category/jswz/34/1771449.html style=错误:1093"/>

mysql中错误:1093

最近在处理一些数据库中数据的时候,写了下面的这一条sql语句:

第一次:

UPDATE f_student 
SET school_id = 0 
WHEREid > ( SELECT id FROM f_student WHERE school_id = M LIMIT 1 ) AND id < ( ( SELECT id FROM f_student WHERE school_id = M LIMIT 1 ) + N )

上面的sql是想将某个区间的数据进行修改,但是放到测试环境下一跑,报下面的错误:

1093 - You can't specify target table 'f_student' for update in FROM clause,

意思很显而易见了,说不能对进行查询操作的表进行update操作,也就说我们的where条件中进行了子查询,并且子查询也是针对需要进行update操作的表的,mysql不支持这种查询修改的方式。

解决方法

上网查了一下,针对这种问题可以通过”绕”的方式进行实现,下面看sql语句。

UPDATE f_student 
SET school_id = 0 
WHEREid > ( SELECT id FROM ( SELECT id FROM f_student WHERE school_id = M LIMIT 1 ) AS temp ) AND id < ( ( SELECT id FROM ( SELECT id FROM f_student WHERE school_id = M LIMIT 1 ) AS temp_1 ) + N )

ok,完全没有问题。

第二次

UPDATE app_works_categories 
SET category_id = ( SELECT id FROM app_category WHERE `name` = '忧郁/悲伤' ) 
WHEREworks_id IN (
SELECT DISTINCT( a.works_id ) 
FROMapp_works_categories aLEFT JOIN app_works_categories b ON a.works_id = b.works_id 
WHEREb.category_id IN ( 334, 335, 345, 180 ) AND a.category_id = 176 ) AND category_id = 176;

还是遇到同样的问题 ,还是用绕的方法

UPDATE app_works_categories 
SET category_id = ( SELECT id FROM app_category WHERE `name` = '忧郁/悲伤' ) 
WHEREworks_id IN (
SELECTworks_id 
FROM(
SELECT DISTINCT( a.works_id ) 
FROMapp_works_categories aLEFT JOIN app_works_categories b ON a.works_id = b.works_id 
WHEREb.category_id IN ( 334, 335, 345, 180 ) AND a.category_id = 176 ) AS wid ) AND category_id = 176;

就解决了。

主要思路:

        就是将出现问题的代码块做一层缓存 (AS 为一个值),然后在从中SELECT 需要的东西 再过滤就好了。

更多推荐

mysql中错误:1093

本文发布于:2024-02-16 18:11:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1691012.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:错误   mysql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!