一张50万的数据
staffid staffname passwd
0000001 张三
0000002 李四
0000003 王五
0000004 张三
staffname有可能重名,passwd生成策略是staffname的中文转全拼+001,但如果有重复的,就再+1
上述转换结果是:
staffid staffname passwd
0000001 张三 zhangsan001
0000002 李四 lisi001
0000003 王五 wangwu001
0000004 张三 zhangsan002
请问各位高手,怎么实现这个功能,才能保证效率最块。谢谢。100分相送。
staffid staffname passwd
0000001 张三
0000002 李四
0000003 王五
0000004 张三
staffname有可能重名,passwd生成策略是staffname的中文转全拼+001,但如果有重复的,就再+1
上述转换结果是:
staffid staffname passwd
0000001 张三 zhangsan001
0000002 李四 lisi001
0000003 王五 wangwu001
0000004 张三 zhangsan002
请问各位高手,怎么实现这个功能,才能保证效率最块。谢谢。100分相送。
2,使用goup by 。。having count(*)取得临时表,(因为重名的数据毕竟是少数,你要是在开始生成数据的时候,就去验证是否有重复名字,那等于做了过多的子查询);
3,根据得到的临时表,去update重复的数据。
没有字典表 这个恐怕实现不了
第一步 建立临时表 (把重复的放在临时表中)
create table ttmp_1 as select * from table where staffname in (
select staffname from table group by staffname having count(staffname)>1) order by staffid,staffname
提供一个思路 先建立一个变量 a
然后在 游标中的第一条记录 中的 staffname 赋值进去 .
然后循环读取 游标中记录
如果 staffname 相同就 update 后面的 passwd ,不同就 重新赋值 然后继续循环update
update table1 就可以了