MySQL delete с вложенным запросом выбора
У меня есть следующий запрос MySQL:
DELETE FROM catalogue
WHERE catalogue_id IN (
SELECT catalogue_id
FROM catalogue
WHERE (
product_id = (SELECT product_id FROM catalogue WHERE catalogue_id = '2290')
AND length_id = (SELECT length_id FROM catalogue WHERE catalogue_id = '2290')
AND gauge_id = (SELECT gauge_id FROM catalogue WHERE catalogue_id = '2290')
)
)
но когда я пытаюсь выполнить, я получаю следующее сообщение об ошибке:
вы не можете указать целевую таблицу "каталог" для обновления в предложении FROM
может кто-нибудь подскажет, где я ошибаюсь?
2 ответов
выполнить двойной вложенности
DELETE FROM catalogue
WHERE catalogue_id IN (SELECT catalogue_id FROM (
SELECT catalogue_id
FROM catalogue
WHERE (
product_id = (SELECT product_id FROM catalogue WHERE catalogue_id = '2290')
AND length_id = (SELECT length_id FROM catalogue WHERE catalogue_id = '2290')
AND gauge_id = (SELECT gauge_id FROM catalogue WHERE catalogue_id = '2290')
)) x
)
он дурачит mysql
или вы можете использовать временную таблицу:
CREATE TEMPORARY TABLE t AS
SELECT catalogue_id
FROM catalogue
WHERE (
product_id = (SELECT product_id FROM catalogue WHERE catalogue_id = '2290')
AND length_id = (SELECT length_id FROM catalogue WHERE catalogue_id = '2290')
AND gauge_id = (SELECT gauge_id FROM catalogue WHERE catalogue_id = '2290')
);
DELETE FROM catalogue WHERE catalogue_id IN (SELECT catalogue_id FROM t);
С вашим запросом вы получили You can't specify target table 'catalogue' for update in FROM clause
потому что вы не можете сделать select и update в одной таблице в одном запросе.