V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhttty
V2EX  ›  问与答

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

  •  
  •   zhttty · 2013-07-10 15:27:17 +08:00 · 2180 次点击
    这是一个创建于 3915 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用mysql...

    id name
    1 zhttty
    2 Koo
    3 zhttty

    如上表更新成下表:

    id name
    1 zhttty1
    2 Koo
    3 zhttty3

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

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

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

    你要怎么改名?
    lichao
        6
    lichao  
       2013-07-10 16:21:19 +08:00   ❤️ 1
    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
        7
    zhttty  
    OP
       2013-07-10 16:36:43 +08:00   ❤️ 1
    @lichao 嗯,是对的,测试了41条混合的数据,成功。

    感谢...
    davepkxxx
        8
    davepkxxx  
       2013-07-10 17:12:47 +08:00
    @zhttty 为什么不能同时查出表又同时修改表
    zhttty
        9
    zhttty  
    OP
       2013-07-10 17:18:17 +08:00   ❤️ 1
    @davepkxxx mysql的机制或者说功能上的缺陷...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2891 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:55 · PVG 21:55 · LAX 06:55 · JFK 09:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.