mySQL UPDATE WHERE с подзапросом выдает ошибку - PullRequest
1 голос
/ 27 сентября 2019

Я хочу обновить таблицу с помощью подзапроса и всегда получаю сообщение об ошибке.Теперь я сделал очень упрощенную версию (которая не имеет большого смысла, но показывает мою ошибку)

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

1 Ответ

1 голос
/ 27 сентября 2019

Одним из решений упрощенного запроса является помещение подзапроса в другой подзапрос:

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

Этот трюк заставляет MySQL материализовать подзапрос в a_test, так что значения, поступающие из подзапроса с псевдонимом какx не влияет на процесс обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...