ac_*_*ook 9 sql oracle recursive-query
我目前在理解和编写递归查询方面遇到了一些麻烦。我知道递归查询用于搜索信息的层次结构,但我还没有在网上找到一个可以向上移动层次结构的简单解决方案。例如,假设我有一个对家谱建模的关系:
create table family_tree (
child varchar(10)
parent varchar(10)
);
Run Code Online (Sandbox Code Playgroud)
如果我想编写一个递归查询,遍历这个家谱,收集所有父母直到起源,我应该怎么做?
提前致谢。
您可以使用connect by子句。
在您的情况下,SQL 可能如下所示:
select child, parent, level
from family_tree
connect by prior parent = child
Run Code Online (Sandbox Code Playgroud)
如果我想编写一个递归查询,沿着这个家谱,收集所有父母直到原点,我应该怎么做?
使用分层查询和SYS_CONNECT_BY_PATH( column_name, delimiter )函数:
Oracle 18 设置:
create table family_tree (
child varchar(10),
parent varchar(10)
);
INSERT INTO family_tree ( child, parent )
SELECT 'B', 'A' FROM DUAL UNION ALL
SELECT 'C', 'B' FROM DUAL UNION ALL
SELECT 'D', 'C' FROM DUAL UNION ALL
SELECT 'E', 'D' FROM DUAL UNION ALL
SELECT 'F', 'C' FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
查询1:
SELECT SYS_CONNECT_BY_PATH( parent, ' -> ' ) || ' -> ' || child AS path
FROM family_tree
START WITH parent = 'A'
CONNECT BY PRIOR child = parent;
Run Code Online (Sandbox Code Playgroud)
结果:
PATH
-------------------------
-> A -> B
-> A -> B -> C
-> A -> B -> C -> D
-> A -> B -> C -> D -> E
-> A -> B -> C -> F
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19520 次 |
| 最近记录: |