请教mysql批量更新层级关系数据如何实现

cl000001 2014-04-10 04:14:17
有个地址表(数据量较大,百万级的) ,只给3个主要字段:地址id,地址等级,上级地址id:
select id,grade,parentid from addr
where id in (512589,106969,43072,281,7651,200087792,153,103,1)
;

ID GRADE PARENTID
1 1 1 0
2 103 2 1
3 153 3 103
4 281 5 7651
5 7651 5 200087792
6 43072 6 281
7 106969 7 43072
8 512589 8 106969
9 200087792 4 153


现在有个临时表 (10w级数据)
select stid, addr6 from tmp_addr;
需求是根据tmp_addr表的stid来更新所有记录的6级地址,
在oracle里可以这样实现:
update tmp_addr xx
set xx.addr6=(select id from addr where grade=6 and rownum=1 start with id=xx.stid connect by nocycle prior parentid=id)
;



请教下大家如何在mysql里实现这样的功能,我在网上搜了下很多是通过函数传一个参数id,然后用find_in_set,将所有父节点拼接起来,
但是这种每次只能查询一条记录的,我在存储过程里用游标循环试了下,实在是太慢了,tmp_addr 1w多记录就跑了1个多小时还没跑完,就放弃这种方法了,
大家有好的方法或方法,请不吝赐教,谢谢!
...全文
162 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
benluobo 2014-04-10
  • 打赏
  • 举报
回复
没别的办法,只能用findinset编写函数

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧