2014-02-10 5 views
0

У меня есть следующий запрос на выборку:SQL Удалить с SELECT,

SELECT opt.product_option_id 
FROM `oc_product_option_value` AS opt_val, `oc_product_option` AS opt 
WHERE `opt`.`product_option_id` = `opt_val`.`product_option_id` 
AND `opt_val`.`price` = '0.0000' 

Я думал, что я мог бы использовать это в качестве delete запроса:

DELETE oc_product_option, oc_product_option_value FROM oc_product_option 
INNER JOIN oc_product_option_value 

WHERE `oc_product_option`.`product_option_id` = `oc_product_option_value`.`product_option_id` 
AND `oc_product_option_value`.`price` = '0.0000' 

Но что удалены все строки в oc_product_option. Так что же я сделал не так?

+2

Все в 'oc_product_option' имел цену' '0.0000'' будет моя первая догадка. –

+0

@GordonLinoff, Это неправда. В 'oc_product_option' нет таблицы' price'. Во второй таблице ('oc_product_option_value') есть цены, которые действительно' 0,0000', но есть и некоторые с ценой '0.8260' ... – Mathlight

+0

[Ваш код работает отлично] (http://sqlfiddle.com/#! 2/a38fb/1/0). Мое единственное предположение было бы первым Гордоном. – OGHaza

ответ

1

Можете ли вы попробовать?

DELETE t1 FROM oc_product_option t1 
JOIN oc_product_option_value t2 
WHERE `t1`.`product_option_id` = `t2`.`product_option_id` 
AND `t2`.`price` = '0.0000' 

Это намерение удалить строки обеих таблиц?

+1

Это сработало. Благодарю. – Mathlight

+0

Если вы хотите удалить из обеих таблиц, просто назовите их как после синтаксиса DELETE. –

0

Вы делаете круговую зависимость, и именно поэтому вы получите этот результат

Пыльник запрос должен удалить только те строки, которые имеют идентификатор в oc_product_option и нулевой цене. Или вы должны определить диапазон идентификаторов в oc_product_option, используя другой критерий для фильтрации oc_product_option таблица

DELETE FROM oc_product_option o 
WHERE o.product_option_id in (SELECT opt.product_option_id FROM oc_product_option_value 
           where `oc_product_option_value`.`price` = '0.0000') 
+0

Вы не можете использовать ту же таблицу, которую вы удаляете из подзапроса. Я думаю, что это вызовет ошибку. –

+0

Запрос никоим образом не имеет смысла – OGHaza

+0

да, вы правы. скорректировал запрос ... – i100