SQL刪除重複數據只保留一條mysql
https://blog.csdn.net/anya/article/details/6407280sql
MYSQL之You can't specify target table for update in FROM clause解決辦法oracle
https://blog.csdn.net/z_youarethebest/article/details/53785487spa
項目任務表task表中有重複數據,是操做人員重複點擊(且後臺邏輯沒有作校驗)形成。.net
task記錄是根據dispatch表生成的,重複的task記錄指的就是存在多條dispatch_id相同的數據。blog
SELECTci
*get
FROMtable
task後臺
WHERE
dispatch_id IN (
SELECT
dispatch_id
FROM
task
GROUP BY
dispatch_id
HAVING
COUNT(*) > 1
)
AND task_id NOT IN (
SELECT
MIN(task_id)
FROM
task
GROUP BY
dispatch_id
HAVING
COUNT(*) > 1
)
不能先select出同一表中的某些值,再update這個表(在同一語句中)。
將select出的結果再經過中間表select一遍,這樣就規避了錯誤。注意,這個問題只出現於mysql,mssql和oracle不會出現此問題。
DELETE
FROM
task
WHERE
task_id IN (
SELECT
task_id
FROM
(
SELECT
task_id
FROM
task
WHERE
dispatch_id IN (
SELECT
dispatch_id
FROM
task
GROUP BY
dispatch_id
HAVING
COUNT(*) > 1
)
AND task_id NOT IN (
SELECT
MIN(task_id)
FROM
task
GROUP BY
dispatch_id
HAVING
COUNT(*) > 1
)
) a
)