mysql 姓名_mysql – 从名字和姓氏生成唯一的用户名?

CREATE TABLE bar LIKE foo;

INSERT INTO bar (id,user,first,last)

(SELECT f.id,CONCAT(SUBSTRING(f.first,1,1),f.last,

(SELECT COUNT(*) FROM foo f2

WHERE SUBSTRING(f2.first,1,1) = SUBSTRING(f.first,1,1)

AND f2.last = f.last AND f2.id <= f.id

)),f.first,f.last from foo f);

DROP TABLE foo;

RENAME TABLE bar TO foo;

这依赖于主键id,因此对于插入到bar中的每个记录,我们只计算在id小于bar.id的foo中找到的重复项.

鉴于foo:

select * from foo;

+----+------+--------+--------+

| id | user | first | last |

+----+------+--------+--------+

| 1 | aaa | Roger | Hill |

| 2 | bbb | Sally | Road |

| 3 | ccc | Fred | Mount |

| 4 | ddd | Darren | Meadow |

| 5 | eee | Sharon | Road |

+----+------+--------+--------+

上面的INSERT进入吧,导致:

select * from bar;

+----+----------+--------+--------+

| id | user | first | last |

+----+----------+--------+--------+

| 1 | RHill1 | Roger | Hill |

| 2 | SRoad1 | Sally | Road |

| 3 | FMount1 | Fred | Mount |

| 4 | DMeadow1 | Darren | Meadow |

| 5 | SRoad2 | Sharon | Road |

+----+----------+--------+--------+

要从用户名末尾删除“1”,

INSERT INTO bar (id,user,first,last)

(SELECT f3.id,

CONCAT(

SUBSTRING(f3.first,1,1),

f3.last,

CASE f3.cnt WHEN 1 THEN '' ELSE f3.cnt END),

f3.first,

f3.last

FROM (

SELECT

f.id,

f.first,

f.last,

(

SELECT COUNT(*)

FROM foo f2

WHERE SUBSTRING(f2.first,1,1) = SUBSTRING(f.first,1,1)

AND f2.last = f.last AND f2.id <= f.id

) as cnt

FROM foo f) f3)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值