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』
