有時候咱們在編輯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