3. prior演算子
prior
演算子は、主にconnect by
句で使われますが、select
句で使用して、親の行の値を取得するといった用途もあります。サンプルを見てみましょう。
ID | OyaID | Name |
1 | null | AAAA |
2 | 1 | BBBB |
3 | 2 | CCCC |
4 | 1 | DDDD |
5 | 4 | EEEE |
6 | 4 | FFFF |
7 | 1 | GGGG |
10 | null | HHHH |
20 | null | IIII |
21 | 20 | JJJJ |
22 | 21 | KKKK |
select ID,OyaID,Name,prior Name as OyaName,Level, sys_connect_by_path(to_char(ID),',') as path from PriorT start with OyaID is null connect by prior ID = OyaID;
ID | OyaID | Name | OyaName | Level | path |
1 | null | AAAA | null | 1 | ,1 |
2 | 1 | BBBB | AAAA | 2 | ,1,2 |
3 | 2 | CCCC | BBBB | 3 | ,1,2,3 |
4 | 1 | DDDD | AAAA | 2 | ,1,4 |
5 | 4 | EEEE | DDDD | 3 | ,1,4,5 |
6 | 4 | FFFF | DDDD | 3 | ,1,4,6 |
7 | 1 | GGGG | AAAA | 2 | ,1,7 |
10 | null | HHHH | null | 1 | ,10 |
20 | null | IIII | null | 1 | ,20 |
21 | 20 | JJJJ | IIII | 2 | ,20,21 |
22 | 21 | KKKK | JJJJ | 3 | ,20,21,22 |
SQLのイメージは、下記となります。木ごとに区切る赤線をイメージしてます。
最後に
今回は、connect_by_IsLeaf
擬似列,connect_by_root
演算子,prior
演算子を扱いました。次回は、connect by nocycle
,connect_by_isCycle
擬似列を扱います。
参考資料
- 『Advanced Oracle SQL Programming』 Laurent Schneider 著、Rampant TechPress、2008年12月
- 『Oracle Database SQLリファレンス 10g リリース2 階層問合せ』
- 『Oracle Database SQL Reference 10g Release2 Hierarchical Queries』