db2 with语法和递归

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gang950502/article/details/81302045

db2 with语法和递归

1. 创建测试表

CREATE TABLE someplace
(
 ID       INTEGER NOT NULL PRIMARY KEY,
 ParentID  INT,
 NAME      VARCHAR(100)
);

INSERT INTO someplace VALUES(001,null,'陕西省');

INSERT INTO someplace VALUES(002,001,'商洛市');

INSERT INTO someplace VALUES(003,001,'西安市');

INSERT INTO someplace VALUES(004,001,'咸阳市');

INSERT INTO someplace VALUES(005,002,'商州区');

INSERT INTO someplace VALUES(006,003,'雁塔区');

INSERT INTO someplace VALUES(007,004,'三原县');

INSERT INTO someplace VALUES(008,005,'商洛学院');

INSERT INTO someplace VALUES(009,006,'科技二路');

INSERT INTO someplace VALUES(010,005,'莲湖公园');

INSERT INTO someplace VALUES(011,005,'中心广场');

INSERT INTO someplace VALUES(012,004,'李靖故居');

INSERT INTO someplace VALUES(013,002,'428');

INSERT INTO someplace VALUES(014,009,'清华软件园');
commit;
  • 查看数据

    select * from user1.someplace;


这里写图片描述

2. 改成with查询语句

with data(id,parentid,name) as
    (select id,parentid,name from someplace)
    select id,parentid,name from data;
  • 查看结果:
    这里写图片描述

with语法可实现简单的select查询,有时会遇到对同一数据集多次操作,那么with语法就相当适合
,例如以下的查询

with data(id,parentid,name) as
    (select id,parentid,name from someplace)
    select id,parentid,name from data where id = 5
union
    select id,parentid,name from data where id = 6;

查看结果:
这里写图片描述

3. 递归的使用

3.1 查找根节点下的所有叶节点

with data(id,parentid,name) as
    (select id,parentid,name from someplace where parentid is null -- 选择根节点
         union all
    select child.id,child.parentid,child.name from someplace child,data
        where child.parentid = data.id-- 递归条件
    )
    select id,parentid,name from data ;

查看结果:
这里写图片描述

3.2 查看某个叶节点下的所有节点

with data(id,parentid,name) as
    (select id,parentid,name from someplace where id = 5 -- 选择根节点
         union all
    select child.id,child.parentid,child.name from someplace child,data
        where child.parentid = data.id-- 递归条件
    )
    select id,parentid,name from data ;

查看结果
这里写图片描述
这里可以看到成功获取到了节点5本身和向下的所有节点

猜你喜欢

转载自blog.csdn.net/gang950502/article/details/81302045