在MySQL中有成百上千的行,其中大多数是彼此重复的。所以在这里,我想用最小的行ID来更新复制行列" update“。
+----+------+-----+--------+
| ID | Name | Age | Update |
+----+------+-----+--------+
| 1 | John | 16 | NULL |
| 2 | John | 16 | 1 |
| 3 | John | 16 | 1 |
| 4 | John | 16 | 1 |
+----+------+-----+--------+
在上面的例子中,最小的行ID是"1“。具有相同"Name“和"Age”的重复行在"Update“列中更新为"1”。
我知道要删除重复的行,保留最小的行ID。
DELETE FROM `students`
WHERE ID NOT IN (
SELECT * FROM (
SELECT MIN(ID) FROM students
GROUP BY name, age
)
x);
但是现在我想要更新重复的行。
发布于 2018-06-18 00:59:44
您可以更新所有行以包含所有重复行的最小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;
https://stackoverflow.com/questions/50898230
复制相似问题