Это может быть помечено как дубликат, но я не смог найти этот пример в моем поиске.Строка MYSQL DELETE, если дублирующий ключ существует в одной таблице с указанным значением
У меня есть таблица продуктов для категории, которая позволяет дублировать ключи, поэтому позволяет размещать продукты по нескольким категориям по ID. У меня есть ситуация, когда несколько тысяч продуктов были неправильно помещены в категорию. Если для продукта назначены «фигуры действий» и «комиксы», то назначение «комиксов» является ошибочным.
Я пытаюсь написать один запрос MYSQL, который будет удалять строки, если обнаружена строка с дублирующимся ключом и указанное значение для «Action Figures». Другой способ сказать: если продукт присваивается обоим категориям, я хочу удалить строку, присваивая ее ошибочной категории.
Я не могу понять, что вы можете найти инструкцию по удалению, которая может искать в той же таблице по ID так, как я хочу.
Вот что у меня до сих пор (Edit- Благодаря ниже ответ):
DELETE FROM oc_product_to_category c1
WHERE c1.category_id = '25'
AND EXISTS(
SELECT * FROM oc_product_to_category c2
WHERE c1.product_id = c2.product_id AND c2.category_id = '24')
К сожалению, это производственная ошибка синтаксиса.
You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near
'c1
WHERE c1.category_id = '25'
AND EXISTS (
SELECT * FROM oc_product_to_catego' at line 1
Когда я пытаюсь с синтаксисом
DELETE c1 FROM oc_product_to_category c1 ...
Я получаю сообщение об ошибке:
You can't specify target table 'c1' for update in FROM clause
Я не знал, что вы можете использовать 2 разных псевдонимов, чтобы ссылаться на одну и ту же таблицу ... Незнание снова наносит удар. И да, цифры произвольны, но я пытаюсь восстановить данные. Фактические значения - 25 и 33, но не беспокойтесь. –
Это очень полезный инструмент для сравнения значений внутри таблицы. Я обновил с 26 по 33. Также, пожалуйста, отметьте ответ как принятый, если он решит ваш вопрос. –
Я отредактировал свой вопрос, получив синтаксическую ошибку и недостаточно изучив SQL, чтобы расшифровать его. Кроме того, спасибо за редактирование вашего ответа. Последнее предложение моего первого комментария было направлено на другой комментарий, который с тех пор был удален. –