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
)