Oracle 的 CONNECT BY PRIOR ... START WITH 語法專為處理表中的遞歸關係設計,常見於目錄樹、組織架構(部門層級)等層次化數據的存儲與查詢。
SELECT * FROM table_name
CONNECT BY PRIOR child_col = parent_col
START WITH root_condition;
假設表結構:id(節點ID),parent_id(父節點ID)
| id | parent_id |
|---|---|
| 1 | 0 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 3 |
SELECT * FROM table_name
CONNECT BY PRIOR id = parent_id
START WITH id = 2;
結果:
| id | parent_id |
|---|---|
| 2 | 1 |
| 4 | 2 |
ORA-01436: CONNECT BY loop in user data 錯誤。-- 表結構
C_AREA_CDE C_SNR_AREA
1 (null)
101 1
103 1
...
SELECT * FROM tb_cus_area_cde a
CONNECT BY PRIOR a.c_snr_area = a.c_area_cde
START WITH a.c_area_cde = '1040101';
SELECT * FROM tb_cus_area_cde a
CONNECT BY PRIOR a.c_area_cde = a.c_snr_area
START WITH a.c_snr_area IS NULL;
掌握 CONNECT BY PRIOR 的核心在於明確「誰是父、誰是子」以及「從哪裡開始」。配合 LEVEL、SYS_CONNECT_BY_PATH 等輔助函數,可構建強大的樹形報表與層級展示功能。