2014-02-10 71 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的id範圍'oc_product_option'過的''0.0000''價格將是我的第一個猜想。 –

+0

@戈登林諾夫,事實並非如此。 'oc_product_option'中沒有'價格'表。在第二張表('oc_product_option_value')中,價格確實是'0.0000',但也有一些價格爲'0.8260' ... – Mathlight

+0

[Your code works fine](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

你讓一個圓形的依賴,這就是爲什麼你會得到這樣的結果

婁查詢應該只刪除ID在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