Tree
使用 SQL 遍歷關係數據庫中的樹狀數據
有沒有辦法在 SQL 中遍歷樹數據?我知道
connect by
在 Oracle 中,但是在其他 SQL 實現中是否有另一種方法可以做到這一點?我問是因為使用connect by
比編寫循環或遞歸函式來為每個結果執行查詢更容易。由於有些人似乎對“樹數據”這個片語感到困惑,我將進一步解釋:我的意思是關於具有
parent_id
或類似欄位的表,其中包含來自同一表中另一行的主鍵。問題來自我在 Oracle 數據庫中處理以這種方式儲存的數據的經驗,並且知道
connect by
其他 DBMS 中沒有實現。如果要使用標準 SQL,則必須為每個想要上升的父表創建一個新的表別名。這很容易失控。
Celko 的書是一個很好的資源——如果有時有點過於“學術”的話。
我也確實發現 這種被稱為“閉包表”的方法效果很好。
如果您使用的是允許遞歸 CTE 的數據庫(例如PostgreSQL 8.4 或更新版本,或者SQL Server 2005 或更新版本),那麼它們確實是最好的選擇。如果您在 Oracle 上,總會有古老的“連接方式”。
根據我的經驗,在“幼稚樹”模式中傳遞一組表,並且必須弄清楚如何從該儲存中提取正確的樹,而不是有機會創建更清潔的“閉包表”結構。