使用最小ID更新MYSQL中的重复行列

时间:2018-06-17 15:54:47

标签: mysql mysqli duplicates rows

mysql中有数百行,其中大多数都是相互重复的。所以在这里我要更新重复行列"更新"最小行ID。

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

在上面的示例中,最小行ID是" 1"。具有相同"名称"的重复行。和"年龄"更新"更新"列" 1"。

我知道删除重复的行,保留最小的行ID。

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

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

1 个答案:

答案 0 :(得分:1)

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

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 Fiddle