如何将同名的记录的姓名更新为name的值加上id的值?

2013-07-10 15:27:17 +08:00
 zhttty
用mysql...

id name
1 zhttty
2 Koo
3 zhttty

如上表更新成下表:

id name
1 zhttty1
2 Koo
3 zhttty3

sql怎么写?一同事问的,让我百思不得其解...
2201 次点击
所在节点    问与答
9 条回复
lichao
2013-07-10 15:30:22 +08:00
update tb set name = name + cast(id as varchar(10)) where name in (
select name from tb group by name having count(*) > 1
)
zhttty
2013-07-10 16:05:05 +08:00
@lichao 你的有误的,不能同时查出表又同时修改表...
You can't specify target table 'test' for update in FROM clause

不过还是提供了些思路。
lichao
2013-07-10 16:08:41 +08:00
@zhttty 你用什么数据库?我在 MS SQL SERVER 上测试没问题
66beta
2013-07-10 16:08:55 +08:00
视图可以吗?
keakon
2013-07-10 16:21:02 +08:00
你的需求有问题吧

如果是这样的:
id name
1 a
2 a1
3 a12

你要怎么改名?
lichao
2013-07-10 16:21:19 +08:00
MySQL 的话,可以这么写

update tb join (
select name from tb group by name having count(*) > 1
) tmp on tmp.name = tb.name set tb.name = concat(tb.name , id)

已测试通过
zhttty
2013-07-10 16:36:43 +08:00
@lichao 嗯,是对的,测试了41条混合的数据,成功。

感谢...
davepkxxx
2013-07-10 17:12:47 +08:00
@zhttty 为什么不能同时查出表又同时修改表
zhttty
2013-07-10 17:18:17 +08:00
@davepkxxx mysql的机制或者说功能上的缺陷...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/75358

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX