如何用最小ID更新MySQL中的重复行列?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (143)

MySQL中有数百行,其中大多数是相互复制的,我想用最小行ID更新重复行列“Update”

+----+------+-----+--------+
| ID | Name | Age | Update |
+----+------+-----+--------+
| 1  | John | 16  | NULL   |
| 2  | John | 16  | 1      |
| 3  | John | 16  | 1      |
| 4  | John | 16  | 1      |
+----+------+-----+--------+

我知道如何删除重复行,同时保留最小行ID,但我想更新重复的行

DELETE FROM `students` 
  WHERE ID NOT IN (
    SELECT * FROM (
      SELECT MIN(ID) FROM students 
        GROUP BY name, age
    ) 
  x);
提问于
用户回答回答于

可以更新所有行以包含所有重复行的最小ID,如果更新列与ID列相同,则使用第二次更新将更新列设置为NULL。

UPDATE Table1 AS u 
SET `Update` = (
    SELECT MIN(ID) 
    FROM (
        SELECT * FROM Table1 AS t
    ) AS l 
    GROUP BY l.Name, l.Age 
    HAVING l.Name = u.Name AND l.Age = u.Age
);
UPDATE Table1 SET `Update` = NULL WHERE `Update` = ID;

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动