Tree

使用 SQL 遍歷關係數據庫中的樹狀數據

  • December 29, 2017

有沒有辦法在 SQL 中遍歷樹數據?我知道connect by在 Oracle 中,但是在其他 SQL 實現中是否有另一種方法可以做到這一點?我問是因為使用connect by比編寫循環或遞歸函式來為每個結果執行查詢更容易。

由於有些人似乎對“樹數據”這個片語感到困惑,我將進一步解釋:我的意思是關於具有parent_id或類似欄位的表,其中包含來自同一表中另一行的主鍵。

問題來自我在 Oracle 數據庫中處理以這種方式儲存的數據的經驗,並且知道connect by其他 DBMS 中沒有實現。如果要使用標準 SQL,則必須為每個想要上升的父表創建一個新的表別名。這很容易失控。

Celko 的書是一個很好的資源——如果有時有點過於“學術”的話。

我也確實發現 這種被稱為“閉包表”的方法效果很好。

如果您使用的是允許遞歸 CTE 的數據庫(例如PostgreSQL 8.4 或更新版本,或者SQL Server 2005 或更新版本),那麼它們確實是最好的選擇。如果您在 Oracle 上,總會有古老的“連接方式”

根據我的經驗,在“幼稚樹”模式中傳遞一組表,並且必須弄清楚如何從該儲存中提取正確的樹,而不是有機會創建更清潔的“閉包表”結構。

引用自:https://dba.stackexchange.com/questions/48