首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mySQL UPDATE WHERE with subquery出错

问mySQL UPDATE WHERE with subquery出错
EN

Stack Overflow用户
提问于 2019-09-27 11:19:34
回答 1查看 23关注 0票数 1

我想使用子查询更新表,但总是得到一个错误。现在我做了一个非常简单的版本(这没有多大意义,但显示了我的错误)

代码语言:javascript
复制
UPDATE a_test SET categoryID = '2956' WHERE id IN (
    (
        SELECT id from a_test
    )
)

这将以以下错误结束:

代码语言:javascript
复制
#1093 - Table 's_articles_categories' is specified twice, both as a target for 'UPDATE' and as a separate source for data

为什么会出现这个错误?当我对表a_test使用别名时,我得到了同样的错误。

这是我想使用的完整查询,但有相同的错误:

代码语言:javascript
复制
UPDATE s_articles_categories SET categoryID = '2956' WHERE id IN
(
SELECT s_articles_categories.id FROM `s_articles`
LEFT JOIN s_articles_categories ON s_articles.id = s_articles_categories.articleID
WHERE s_articles_categories.categoryID NOT IN (
SELECT id FROM s_categories 
WHERE s_categories.id NOT IN (SELECT parent FROM s_categories WHERE parent IS NOT null GROUP BY parent)
)
)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-27 11:33:30

简化查询的一种解决方案是将子查询包装在另一个子查询中:

代码语言:javascript
复制
UPDATE a_test
SET categoryID = '2956'
WHERE id IN (SELECT id FROM (SELECT id FROM a_test) x );

此技巧强制MySQL在a_test上具体化该子查询,因此来自别名为x的子查询的值在更新过程中不会受到影响。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58127379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档