1. 程式人生 > >mysql刪除重複資料只保留id最大一條記錄

mysql刪除重複資料只保留id最大一條記錄

一:首先是這麼想的

DELETE
FROM
    t_4g_phone
WHERE
    id NOT IN (
            SELECT
                max(b.id) AS id
            FROM
                t_4g_phone b
            GROUP BY
                b.SERIAL_NUMBER
)

發現在mysql中會報錯

錯誤資訊:[Err] 1093 - You can't specify target table 't_4g_phone' for update in FROM clause

於是查資料說是不能先select出同一表中的某些值,再update這個表(在同一語句中)

二:正確寫法

DELETE
FROM
    t_4g_phone
WHERE
    id NOT IN (
    SELECT
        id
    FROM
        (
            SELECT
                max(b.id) AS id
            FROM
                t_4g_phone b
            GROUP BY
                b.SERIAL_NUMBER
        ) b
)

也就是說將select出的結果再通過中間表select一遍,這樣就規避了錯誤。注意,這個問題只出現於mysql,mssql和oracle不會出現此問題