Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mySQL更新,其中with subquery给出错误_Mysql_Subquery - Fatal编程技术网

mySQL更新,其中with subquery给出错误

mySQL更新,其中with subquery给出错误,mysql,subquery,Mysql,Subquery,我想用一个子查询更新一个表,但总是得到一个错误。 现在我制作了一个非常简化的版本(虽然没有多大意义,但显示了我的错误) 这将导致以下错误: #1093 - Table 's_articles_categories' is specified twice, both as a target for 'UPDATE' and as a separate source for data 为什么会出现这个错误? 当我为表a_测试使用别名时,我会得到相同的错误 这是我要使用的完整查询,但有相同的错误:

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

这将导致以下错误:

#1093 - Table 's_articles_categories' is specified twice, both as a target for 'UPDATE' and as a separate source for data
为什么会出现这个错误? 当我为表a_测试使用别名时,我会得到相同的错误

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

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
的子查询的值就不会随着更新的进行而受到影响。

我不会尝试回答实际的查询,因为我看不到数据,因此也不真正理解逻辑。很好,这也适用于我想要使用的查询。我学到了一些东西!
UPDATE a_test
SET categoryID = '2956'
WHERE id IN (SELECT id FROM (SELECT id FROM a_test) x );