zhttty
V2EX  ›  问与答

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

  •  
  •   zhttty · Jul 10, 2013 · 3170 views
    This topic created in 4864 days ago, the information mentioned may be changed or developed.
    用mysql...

    id name
    1 zhttty
    2 Koo
    3 zhttty

    如上表更新成下表:

    id name
    1 zhttty1
    2 Koo
    3 zhttty3

    sql怎么写?一同事问的,让我百思不得其解...
    9 replies  •  1970-01-01 08:00:00 +08:00
    lichao
    lichao
    Jul 10, 2013❤️1
    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
    zhttty
    OP
    Jul 10, 2013❤️1
    2
    @lichao 你的有误的,不能同时查出表又同时修改表...
    You can't specify target table 'test' for update in FROM clause

    不过还是提供了些思路。
    lichao
    lichao
    Jul 10, 2013
    3
    @zhttty 你用什么数据库?我在 MS SQL SERVER 上测试没问题
    66beta
    66beta
    Jul 10, 2013
    4
    视图可以吗?
    keakon
    keakon
    Jul 10, 2013
    5
    你的需求有问题吧

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

    你要怎么改名?
    lichao
    lichao
    Jul 10, 2013❤️1
    6
    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
    zhttty
    OP
    Jul 10, 2013❤️1
    7
    @lichao 嗯,是对的,测试了41条混合的数据,成功。

    感谢...
    davepkxxx
    davepkxxx
    Jul 10, 2013
    8
    @zhttty 为什么不能同时查出表又同时修改表
    zhttty
    zhttty
    OP
    Jul 10, 2013❤️1
    9
    @davepkxxx mysql的机制或者说功能上的缺陷...
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5151 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:19 · PVG 16:19 · LAX 00:19 · JFK 03:19
    ♥ Do have faith in what you're doing.