Oracle数据库递归查询
最近在做一个树状编码管理系统,其中用到了oracle的树状递归查询(关键字:SELECT … WHERE… START WITH … CONNECT BY PRIOR)
以后开发树状菜单、树状评论、树状文件结构,只要和树扯得上关系的都可以应用,前提是你用的是oracle数据库
数据准备
-- 建表
CREATE TABLE TB (
ID NUMBER(10) NOT NULL, --主键
PID NUMBER(10) , --父id
NAME VARCHAR(128) --名称
)
-- 插数据
-- 一级节点
INSERT INTO TB VALUES (1,0,'查询');
INSERT INTO TB VALUES (2,0,'咨询');
INSERT INTO TB VALUES (3,0,'办理');
-- 二级节点
INSERT INTO TB VALUES (4,1,'余额查询');
INSERT INTO TB VALUES (5,1,'话费查询');
INSERT INTO TB VALUES (6,1,'城市查询');
INSERT INTO TB VALUES (7,1,'租房查询');
INSERT INTO TB VALUES (8,1,'公交查询');
INSERT INTO TB VALUES (9,1,'地铁查询');
INSERT INTO TB VALUES (10,2,'疑问咨询');
INSERT INTO TB VALUES (11,2,'报障咨询');
INSERT INTO TB VALUES (12,2,'话费咨询');
INSERT INTO TB VALUES (13,2,'余额咨询');
INSERT INTO TB VALUES (14,2,'活动咨询');
INSERT INTO TB VALUES (15,3,'公交办理');
INSERT INTO TB VALUES (16,3,'地铁办理');
INSERT INTO TB VALUES (17,3,'银行办理');
-- 三级节点
INSERT INTO TB VALUES (18,7,'一手房东查询');
INSERT INTO TB VALUES (19,7,'二手房东查询');
INSERT INTO TB VALUES (20,7,'三手房东查询');
INSERT INTO TB VALUES (21,7,'中介房东查询');
以上数据PID为0的表示根节点,根节点可以有多个,根节点的PID最好不要用NULL,此时会引起全表扫描。
按照层级关系展示如下:
ID |父ID|层级|名称 |
---|----|----|-------------------|
1 |0 |1 |--查询 |
4 |1