You can't specify target table 'ship_product_cat' for update in FROM clause

有時候咱們在編輯update時須要select做爲條件,在mysql中有時會出現這樣的錯誤:You can't specify target table for update in FROM clause錯誤的意思是說,不能先select出同一表中的某些值,再update這個表(在同一語句中)。mysql

例以下面這個sql:sql

UPDATE ship_product_cat SET is_parent = 0  WHERE id in(
SELECT id FROM ship_product_cat WHERE name in('Control','Propeller/Shaft')
);

錯誤信息:oracle

[SQL]UPDATE ship_product_cat SET is_parent = 0 WHERE id in(
SELECT id FROM ship_product_cat WHERE name in('Control','Propeller/Shaft'));
[Err] 1093 - You can't specify target table 'ship_product_cat' for update in FROM clause

 解決方法——換成下面的SQL就能夠了 spa

UPDATE ship_product_cat SET is_parent = 0  WHERE id in(
SELECT a.id FROM
(SELECT id FROM ship_product_cat WHERE name in('Control','Propeller/Shaft'))a
);

 

也就是說將select出的結果再經過中間表select一遍,這樣就規避了錯誤。code

 這個錯誤會出如今mysql中,但不會出如今oracle中。

相關文章
相關標籤/搜索