我有个餐桌服务员
状态字段的默认值为0。
我要执行以下操作。如果在此表中的名称上发现重复项,请将具有最小id的记录的状态保持为0,并将其他重复记录的状态更新为“5”。
例如:

   1    Ram     0
   2    Sham    0
   5    XYZ     0
   6    XYZ     0
   7    Sham    0
   8    SHam    0
   9    Yo YO   0
  10    Helo    0
  11    xyz     0

在运行查询之后,应该是:
   1    Ram     0
   2    Sham    0
   5    XYZ     0
   6    XYZ     5
   7    Sham    5
   8    Sham    5
   9    Yo YO   0
  10    Helo    0
  11    xyz     5

有人能推荐吗?谢谢。。。

最佳答案

UPDATE `Employee` t1
JOIN (
    SELECT min(id) mid, name, count(*) cnt FROM `Employee`
    GROUP BY name
    HAVING cnt > 1
) t2 ON t1.name = t2.name AND t1.id != t2.mid
SET t1.status = 5

这必须比使用子查询快。
SQL Fiddle

关于mysql - 表中重复记录的更新状态(具有最小ID的记录除外),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17485123/

10-10 06:38