mysql中You can’t specify target table for update in FROM clause錯誤解決方法

字號:


    mysql中You can't specify target table for update in FROM clause錯誤的意思是說,不能先select出同一表中的某些值,再update這個表(在同一語句中)。 例如下面這個sql:
    代碼如下:
    delete from tbl where id in
    (
    select max(id) from tbl a where EXISTS
    (
    select 1 from tbl b where a.tac=b.tac group by tac HAVING count(1)>1
    )
    group by tac
    )
    改寫成下面就行了:
    代碼如下:
    delete from tbl where id in
    (
    select a.id from
    (
    select max(id) id from tbl a where EXISTS
    (
    select 1 from tbl b where a.tac=b.tac group by tac HAVING count(1)>1
    )
    group by tac
    ) a
    )
    也就是說將select出的結(jié)果再通過中間表select一遍,這樣就規(guī)避了錯誤。注意,這個問題只出現(xiàn)于mysql,mssql和oracle不會出現(xiàn)此問題。