gpt4 book ai didi

带有子查询的 mySQL UPDATE WHERE 给出错误

转载 作者:行者123 更新时间:2023-11-29 07:18:05 25 4
gpt4 key购买 nike

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

UPDATE a_test SET categoryID = '2956' WHERE id IN (
(
SELECT id from a_test
)
)

此错误结束:

#1093 - Table 's_articles_categories' is specified twice, both as a target for 'UPDATE' and as a separate source for data

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

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

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)
)
)

最佳答案

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

UPDATE a_test
SET categoryID = '2956'
WHERE id IN (SELECT id FROM (SELECT id FROM a_test) x );

这个技巧迫使 MySQL 在 a_test 上具体化子查询,这样来自别名为 x 的子查询的值不会随着更新的进行而受到影响。

关于带有子查询的 mySQL UPDATE WHERE 给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58127379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com