MySQL更新一行的后续重复项

时间:2014-11-26 20:53:08

标签: mysql

我们正在进行一些清理练习,我需要删除意外添加到数据库表中的重复数据。 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。

我不确定我能做到这一个是一个查询,但我认为步骤如下:

  1. 运行类似于上面的查询
  2. 提取重复集的所有ID
  3. 忽略列表中的第一个,因为我们不想更改正确添加的第一条记录
  4. 对剩余的ID集运行更新
  5. 我在这里运气不好 - 或者有可能吗?

    非常感谢!

2 个答案:

答案 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

请参阅example fiddle here