用最小id更新mysql中的duplicate rows列

cygmwpex  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(360)

mysql中有数百行,其中大多数是相互重复的。所以这里我想用最小的行id更新duplicate rows列update。

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

在上面的示例中,最小行id是“1”。“update”列中具有相同“name”和“age”的重复行更新为“1”。
我知道删除重复的行,保持最小的行id。

DELETE FROM `students` 
  WHERE ID NOT IN (
    SELECT * FROM (
      SELECT MIN(ID) FROM students 
        GROUP BY name, age
    ) 
  x);

但是现在我想更新重复的行。

ycl3bljg

ycl3bljg1#

您可以更新所有行以包含所有重复行的最小id,如果update列与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;

sql小提琴

相关问题