ORACLE A表存储父节点及所有子集的数据,B表存父ID及对应的数据,查询出父ID下所有子集对应的B表数据

魑魅玲儿 2018-01-23 04:31:24
有两张表
a表
create table a
(aid varchar2(40),
name varchar2(100),
parentid varchar2(40)
);
b表
create table b
(aid varchar2(40),
operation varchar2(100)
);
a表数据如下
AID name parentid
420000000000 湖北省 000000000000
420200000000 湖北省黄石市 420000000000
420202000000 黄石市黄石港区 420200000000
420203000000 黄石市西塞山区 420200000000

b表数据如下
AID operation
420000000000 12312321321

希望得到结果
AID operation
420000000000 12312321321
420200000000 12312321321
420202000000 12312321321
420203000000 12312321321

求大神支招,为了减少压力在b表只存储父ID,但是想得到父ID下所有子集的结果,想一个语句搞定
...全文
580 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu志坚 2018-01-23
  • 打赏
  • 举报
回复
嗯,相应的改改就可以满足自己的需求了。树状结构的用connect by就对了。
liu志坚 2018-01-23
  • 打赏
  • 举报
回复
select t.aid,t.operation from ( select a.*, level, connect_by_root(a.aid) as rootid,b.operation from a,b start with a.parentid = b.aid connect by a.parentid = prior a.aid) t;
魑魅玲儿 2018-01-23
  • 打赏
  • 举报
回复
引用 5 楼 liuzhijian2008x 的回复:
select t1.aid, b.operation from (select a.*, level, connect_by_root(a.aid) as rootid from a start with a.parentid = '000000000000' connect by a.parentid = prior a.aid) t1, b where t1.rootid = b.aid; 看看这个应该可以满足你要求
我解决了,在这个基础上改了一下,感谢给灵感
魑魅玲儿 2018-01-23
  • 打赏
  • 举报
回复
引用 5 楼 liuzhijian2008x 的回复:
select t1.aid, b.operation from (select a.*, level, connect_by_root(a.aid) as rootid from a start with a.parentid = '000000000000' connect by a.parentid = prior a.aid) t1, b where t1.rootid = b.aid; 看看这个应该可以满足你要求
可以看下我第二个描述,其实B表里面的AID可能存的是a表里面的任何一个ID,也就是说A表的父ID是B表里面存的ID,不是只有那一条数据
liu志坚 2018-01-23
  • 打赏
  • 举报
回复
select t1.aid, b.operation from (select a.*, level, connect_by_root(a.aid) as rootid from a start with a.parentid = '000000000000' connect by a.parentid = prior a.aid) t1, b where t1.rootid = b.aid; 看看这个应该可以满足你要求
魑魅玲儿 2018-01-23
  • 打赏
  • 举报
回复
引用 2 楼 wmxcn2000 的回复:
-- 楼主百度一下 这串东西。 oracle connect by prior id = id
我知道这个,但是这个不是只能在一张表里使用吗
魑魅玲儿 2018-01-23
  • 打赏
  • 举报
回复
重新描述下,免得有误会 有两张表 a表 create table a (aid varchar2(40), name varchar2(100), parentid varchar2(40) ); b表 create table b (aid varchar2(40), operation varchar2(100) ); a表数据如下 AID name parentid 420000000000 湖北省 000000000000 420200000000 湖北省黄石市 420000000000 420202000000 黄石市黄石港区 420200000000 420203000000 黄石市西塞山区 420200000000 b表数据如下 AID operation 420000000000 12312321321 420200000000 36565112121 希望得到结果 AID operation 420000000000 12312321321 420200000000 12312321321 420202000000 12312321321 420203000000 12312321321 420200000000 36565112121 420202000000 36565112121 420203000000 36565112121 求大神支招,为了减少压力在b表只存储父ID,但是想得到父ID下所有子集的结果,想一个语句搞定
卖水果的net 2018-01-23
  • 打赏
  • 举报
回复
-- 楼主百度一下 这串东西。 oracle connect by prior id = id

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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