SQL connect by递归查询

create table SYS_ADMINISTRATIVE_ORGAN
(
  administrative_organ_id   NUMBER(9) not null,
  administrative_organ_code VARCHAR2(10),
  administrative_organ_name VARCHAR2(100),
  remark                    VARCHAR2(200),
  parent_id                 NUMBER(9),
  syn_data_mark             NUMBER(1)
)
-- Add comments to the table 
comment on table SYS_ADMINISTRATIVE_ORGAN
  is '行政区域表';
-- Add comments to the columns 
comment on column SYS_ADMINISTRATIVE_ORGAN.administrative_organ_id
  is '行政区域ID';
comment on column SYS_ADMINISTRATIVE_ORGAN.administrative_organ_code
  is '行政区域代码';
comment on column SYS_ADMINISTRATIVE_ORGAN.administrative_organ_name
  is '行政区域名称';
comment on column SYS_ADMINISTRATIVE_ORGAN.remark
  is '描述';
comment on column SYS_ADMINISTRATIVE_ORGAN.parent_id
  is '上级行政区域ID';
comment on column SYS_ADMINISTRATIVE_ORGAN.syn_data_mark
  is '数据同步标志(1:不同步)';
--select * from SYS_ADMINISTRATIVE_ORGAN a where a.administrative_organ_name like '%山西%'
--select * from SYS_ADMINISTRATIVE_ORGAN a where a.parent_id=1
--select * from SYS_ADMINISTRATIVE_ORGAN a where a.administrative_organ_id=1
select Level ,
       administrative_organ_id, a.parent_id, administrative_organ_name, lpad(' ', 8 * (Level - 1)) || administrative_organ_name as parentName
 from SYS_ADMINISTRATIVE_ORGAN a
  start with a.administrative_organ_id =1   connect by a.parent_id = prior a.administrative_organ_id
 -- start with 语句表示树从什么位置开始进行检索
 -- start with a.administrative_organ_id=1(从行政区划代码等于1的行政区划开始进行检索,即从“中华人民共和国”开始进行检索)
-- connect by语句在每行的行政区划前面加入空格
-- connect by语句表示当前数据行和下一行数据之间的关系。
-- prior 语句表示那个字段属于前一行(英文解释:优先的;在先的,在前的)
-- 如:connect by a.parent_id = prior a.administrative_organ_id;
  --         表示当前行的parent_id等于上一行的administrative_organ_id。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值