oracle表关联层级树查询

select level
,lpad(' ', (level - 1) * 20, ' ') || t.fk_table as node_name --节点名称(带缩进)
,t.fk_name
,t.fk_table
,t.pk_name
,t.pk_table
from (select null as fk_name
,uta.table_name as fk_table
,null as pk_name
,null as pk_table
from user_tables uta
where not exists (select 1
from user_constraints uc
where uc.constraint_type = 'R'
and uc.table_name = uta.table_name)
union all
select a.constraint_name as fk_name
,a.table_name as fk_table
,b.constraint_name as pk_name
,b.table_name as pk_table
from user_constraints a
,user_constraints b
where a.constraint_type = 'R'
and b.constraint_type = 'P'
and a.r_constraint_name = b.constraint_name) t
start with t.pk_table is null
connect by prior t.fk_table = t.pk_table
--
;

从父节点查询子节点
start with t.pk_table is null
connect by prior t.fk_table = t.pk_table

从子节点查询父节点
start with t.fk_table = 'ASSIGN'
connect by prior t.pk_table = t.fk_table


--alias as child and parent

select level
,lpad(' ', (level - 1) * 20, ' ') || t.child_table as node_name --节点名称(带缩进)
-- ,t.node_name
,t.child_table
-- ,t.pk_name
,t.parent_table
from (select null as node_name
,uta.table_name as child_table
,null as pk_name
,null as parent_table
from user_tables uta
where not exists (select 1
from user_constraints uc
where uc.constraint_type = 'R'
and uc.table_name = uta.table_name)
union all
select a.constraint_name as node_name
,a.table_name as child_table
,b.constraint_name as pk_name
,b.table_name as parent_table
from user_constraints a
,user_constraints b
where a.constraint_type = 'R'
and b.constraint_type = 'P'
and a.r_constraint_name = b.constraint_name) t
start with t.parent_table is null
connect by prior t.child_table = t.parent_table
--
;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值