mysql - 查找重复的mysql记录并更新第一个重复的值

  显示原文与译文双语对照的内容
0 0

我有一张这样的桌子。


ID Name Tag 
1 Orange tea 
2 Pear light 
3 Apple tea
4 Juice tea
5 Cocoa baseball
6 Camera baseball

我想要做的是对具有重复标签的行,我想更新最新出现的第一次出现的名称。

所以在上面的例子中,我想更新从Orange到果汁的ID 1,从 Cocoa 删除其他的( #3,#4 ) 和更新 ID 5,并删除 #6. 。

我将如何使用MySQL和 PHP? 或者可能只在MySQL内做?

谢谢!

时间: 原作者:

0 0

对于 UPDATE 查询,只有在有重复行时,才需要获得每个标记的最小和最大值:


UPDATE table t
 JOIN (
 SELECT MinID, b.Name LatestName
 FROM table b
 JOIN (
 SELECT MIN(ID) MinID, MAX(ID) MaxID
 FROM table
 GROUP BY tag
 HAVING COUNT(*)> 1
 ) g ON b.ID = g.MaxID
 ) rs ON t.ID = rs.MinID
SET t.Name = LatestName;

对于 DELETE 查询,删除不是标识组的第一个标记的所有行:


DELETE t.*
FROM table t
 LEFT JOIN (
 SELECT MIN(ID) MinID
 FROM table
 GROUP BY tag
 ) g ON t.ID = g.MinID
WHERE g.MinID IS NULL;

...