使用SELECT删除SQL

时间:2014-02-10 12:37:13

标签: mysql sql select sql-delete

我有以下选择查询:

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 个答案:

答案 0 :(得分: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 :(得分:0)

你造成循环依赖,这就是你得到这个结果的原因

Bellow查询应仅删除在oc_product_option中具有id且价格为零的行。 或者你必须使用另一个标准来定义oc_product_option中的id范围来过滤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')