首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle樹形查詢:CONNECT BY PRIOR START WITH 詳解與實戰

     編輯:Oracle 資料庫基礎

概述

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)

idparent_id
10
21
31
42
53

查詢節點 2 及其所有子孫節點

SELECT * FROM table_name
CONNECT BY PRIOR id = parent_id
START WITH id = 2;

結果:

idparent_id
21
42

進階應用與注意事項

  • 靈活構造查詢可生成完整路徑、層級縮進等豐富輸出。
  • 數據完整性至關重要:若存在循環引用(互為父子),將拋出 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 等輔助函數,可構建強大的樹形報表與層級展示功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved