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);
但现在我想更新重复的行。
答案 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;