在最开始建表时,没有考虑到数据唯一性的问题。一段时间后,要加上组合唯一索引对数据做约束,保持数据唯一性。新建组合唯一索引时,报错:
活动报名表中出现重复数据,现在需要处理清除重复的,保留一条。
多字段处理方式如下:
DELETE
FROM
activity_registrations
WHERE
( activity_id, join_activity_time, user_id ) IN (
SELECT
b.activity_id,
b.join_activity_time,
b.user_id
FROM
(
SELECT
activity_id,
join_activity_time,
user_id
FROM
activity_registrations ar
WHERE
ar.join_activity_time IS NOT NULL
GROUP BY
ar.activity_id,
ar.join_activity_time,
ar.user_id
HAVING
count( * ) > 1
) b
)
AND id NOT IN (
SELECT
a.id
FROM
(
SELECT
min( ar.id ) AS id
FROM
activity_registrations ar
WHERE
ar.join_activity_time IS NOT NULL
GROUP BY
ar.activity_id,
ar.join_activity_time,
ar.user_id
HAVING
count( * ) > 1
) a
)
mysql不支持 You can’t specify target table ‘a’ for update in FROM clause,需要将数据表定义别名,查询出数据后,再去delete操作。