我有如下表:遞歸查詢自己
myTable:
+----+----------+
| id | parentID |
+----+----------+
| 1 | null |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 4 |
-----------------
我想獲得追溯,直到沒有了的parentID所有行。 所以」 ...... WHERE ID = 5"會給我:
5, 4, 2, 1
我有如下表:遞歸查詢自己
myTable:
+----+----------+
| id | parentID |
+----+----------+
| 1 | null |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 4 |
-----------------
我想獲得追溯,直到沒有了的parentID所有行。 所以」 ...... WHERE ID = 5"會給我:
5, 4, 2, 1
您正在使用adjacency list model組織您的分層數據。這種遞歸操作很困難的事實實際上是這種模型的一個主要缺點。
某些DBMS(如SQL Server 2005,Postgres 8.4和Oracle 11g)支持使用common table expressions和WITH
關鍵字的遞歸查詢。
至於MySQL,你可能有興趣在檢查出下面的文章描述了另一種模式(在nested set model),這使得遞歸操作容易(可能):
另外,我還建議查看上面評論中指出的Bill Karwin's presentation。所描述的封閉表模型是嵌套集的非常有效的替代方案。
Bill Karwin創建了一些很好的關於hierchical數據的解釋,以及如何使用不同的解決方案:http://www.slideshare.net/billkarwin/models-for-hierarchical-data – Wrikken 2010-07-18 15:42:45
MySQL沒有遞歸CTE,所以我認爲如果需要處理任意深度,這將需要一個遊標。正在改變結構http://dev.mysql.com/tech-resources/articles/hierarchical-data.html一個選項?或者我們可以假設一些最大深度?也看到這個相關的問題http://stackoverflow.com/questions/169817/is-it-possible-to-query-a-tree-structure-table-in-mysql-in-a-single-query-to-any – 2010-07-18 15:59:14
Bill Karwin的幻燈片真的很酷。 – iddqd 2010-07-24 11:27:26