1

我有一个表 Employee 字段id ,name ,status。状态字段的默认值为0。我想做以下事情。如果在此表中的名称上找到重复项,则将状态为 0 的记录保持为 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

任何人都可以建议。谢谢...

4

2 回答 2

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

SQL 小提琴

于 2013-07-05T09:20:35.130 回答
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小提琴

于 2013-07-05T09:21:21.227 回答