更新表中重复记录的状态,但具有最小ID的记录除外

时间:2013-07-05 09:08:08

标签: mysql sql

我有一张桌子员工 字段 id,name,status 。状态字段的默认值为0。 我想执行以下操作。如果在此表中的名称上找到重复项,则将状态保留为0,以使记录具有最小ID,并将状态更新为“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

有人可以建议。谢谢......

2 个答案:

答案 0 :(得分:2)

update Employee
set [status]=5
where id not in (select min(id) from Employee
                    group by name)

<强> SQL FIDDLE

答案 1 :(得分:1)

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