@Samarkand

Почему не работает MySQL DELETE с подзапросом?

В OpenCart удалили некоторые категории, но продукты остались, их тоже нужно удалить.

Написал такой запрос, но он не работает (строки не удаляются):

delete from %DB_PREFIX%product where product_id in (select distinct p.product_id from %DB_PREFIX%product p left join %DB_PREFIX%product_to_category p2c on p.product_id = p2c.product_id where isnull(p2c.category_id)) -- не работает


Причем этот запрос отрабатывает корректно:

select * from %DB_PREFIX%product where product_id in (select distinct p.product_id from %DB_PREFIX%product p left join %DB_PREFIX%product_to_category p2c on p.product_id = p2c.product_id where isnull(p2c.category_id)) -- OK


В OpenCart много таблиц: product_image, product_to_download, product_description и другие, так вот из них нужные строки удалились, а из таблицы product - нет.

delete from %DB_PREFIX%product_image where product_id in (select distinct p.product_id from %DB_PREFIX%product p left join %DB_PREFIX%product_to_category p2c on p.product_id = p2c.product_id where isnull(p2c.category_id)) -- OK
  • Вопрос задан
  • 374 просмотра
Решения вопроса 1
@BorisKorobkov Куратор тега MySQL
Web developer
После попытки выполнения запроса проверяйте его результат и ошибки. В данном случае невозможно удаление из той же таблицы, из которой в подзапросе выбираются данные.
Либо разделите свой запрос на 2 разных с помощью CREATE TEMPORARY TABLE ... SELECT ....
Либо перепишите по-другому:
DELETE FROM %DB_PREFIX%product WHERE product_id NOT IN (SELECT DISTINCT product_id FROM %DB_PREFIX%product_to_category)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@amfetamine
Выполните вложенный, а результаты используйте в основном
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы