2016-07-19 18 views
0

Это может быть помечено как дубликат, но я не смог найти этот пример в моем поиске.Строка 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 

ответ

0

Это должно вам начать работу. Если ID присваивается как category_id 25 и 33, она удалит запись (ы) с категории 25.

DELETE c1 FROM oc_product_to_category as c1 
WHERE c1.category_id = '25' 
AND EXISTS (
    SELECT id FROM (SELECT * FROM oc_product_to_category) as c2 
    WHERE c1.id = c2.id AND c2.category_id = '33' 
) 

Обратите внимание, что это не приведет к удалению дубликатов записей с CATEGORY_ID 33, если таковые существуют.

+0

Я не знал, что вы можете использовать 2 разных псевдонимов, чтобы ссылаться на одну и ту же таблицу ... Незнание снова наносит удар. И да, цифры произвольны, но я пытаюсь восстановить данные. Фактические значения - 25 и 33, но не беспокойтесь. –

+0

Это очень полезный инструмент для сравнения значений внутри таблицы. Я обновил с 26 по 33. Также, пожалуйста, отметьте ответ как принятый, если он решит ваш вопрос. –

+0

Я отредактировал свой вопрос, получив синтаксическую ошибку и недостаточно изучив SQL, чтобы расшифровать его. Кроме того, спасибо за редактирование вашего ответа. Последнее предложение моего первого комментария было направлено на другой комментарий, который с тех пор был удален. –

 Смежные вопросы

  • Нет связанных вопросов^_^