我们正在进行一些清理练习,我需要删除意外添加到数据库表中的重复数据。 ID显然不同,但其他字段是相同的。
我可以使用以下查询来选择重复的数据集:
SELECT user_id, start_datetime, count(id) AS dup_count
FROM our_table
WHERE status = 1
GROUP BY user_id, start_datetime
HAVING count(id) > 1;
我需要做的是创建一个查询,将每个重复ID APART从第一个开始,并使用它来将状态更新为0。
我不确定我能做到这一个是一个查询,但我认为步骤如下:
我在这里运气不好 - 或者有可能吗?
非常感谢!
答案 0 :(得分:0)
您可以使用update
/ join
:
UPDATE our_table ot JOIN
(SELECT user_id, start_datetime, count(id) AS dup_count, min(id) as minid
FROM our_table
WHERE status = 1
GROUP BY user_id, start_datetime
HAVING count(id) > 1
) dups
ON ot.user_id = dups.user_id and
ot.start_datetime = dups.start_datetime and
ot.id > dups.minid
SET ot.status = 0;
答案 1 :(得分:0)
您可以使用此更新查询将自己加入OUR_TABLE:
UPDATE
our_table o1 INNER JOIN our_table o2
ON o1.status=1
AND o2.status=1
AND o1.user_id = o2.user_id
AND o1.start_datetime = o2.start_datetime
AND o1.ID > o2.ID
SET
o1.status = 0