MySQL多条件子查询遇到同一个表报错时怎么办?
经常玩mysql必定对遇到类似的1064报错
(错误命令)运行命令:
UPDATE `wp_postmeta` SET `meta_value`= '0' WHERE `meta_key`='wppay_type' AND `post_id` IN SELECT `post_id` FROM `wp_postmeta` WHERE `meta_value` = '下载地址' ;
#1064报错提示:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT `post_id` FROM `wp_postmeta` WHERE `meta_value` = '下载地址' at line 1
报错原因很简单,update where in循环查询同一个表,会报错的。
解决方法也特别简单,把这个表作为另一个表存起来,然后读取这个表即可。虽然很变态,但只有这种解决方法了
(正确命令)将最初的MySQL命令修改为如下命令:
UPDATE `wp_postmeta` SET `meta_value`= '0' WHERE `meta_key`='wppay_type' AND `post_id` IN (SELECT `post_id` from (SELECT * FROM `wp_postmeta` WHERE `meta_value` ='下载地址') AS t);
具体解释:如上黄色代码为修改部分
SELECT `post_id` from (SELECT * FROM `wp_postmeta` WHERE `meta_value` ='下载地址') AS t
就是绿色命令行查询报表,整行代码将post_id转存为临时表t。
最终嵌套进去即可。
看似非常简单,但临表把mysql命令搞得非常复杂,看得头晕眼花。
MySQL多条件子查询遇到同一个表报错时怎么办?:等您坐沙发呢!