6
帶有循環引用的「趣味」:SQL SELECT在父-ID組織樹中查找循環引用?
假設我有一個表ELEMENTS,它包含由父ID建模的元素層次結構。
父標識字段對於根爲空。
所有其他記錄具有父元素的(自動定序的)主鍵(ID
)的非空父標識。
例如,使用
SELECT *
FROM Elements
WHERE FATHER_ID not in (SELECT ID FROM Elements)
我能找到具有無效父親引用的所有元素(FATHER_ID
不是一個外鍵,讓我們假設在這個例子中)。
但我怎麼能發現確實有一個有效的父親引用,但他的父親引用鏈中的根並沒有結束元素?我認爲這隻能發生在循環引用中,例如A是B的父親,但B也是A的父親。這種「子樹」沒有鏈接到根,因此不是主樹的一部分。 我想找到這樣的子樹。
當然,我期待的,提供那些導致循環引用無論多久引用鏈可以是元素的查詢。
這是SQL中可能的,還是我需要一個迭代解決方案?
+1使用CONNECT BY的。使用分層數據可以完成各種各樣的偉大事情。請注意,它僅限於Oracle。在11gR2中他們增加了遞歸子查詢分解條款(http://technology.amis.nl/blog/6104/oracle-rdbms-11gr2-goodbye-connect-by-or-the-end-of-hierarchical-querying-as-我們知道它) – 2011-04-27 12:02:02
奧哈。這看起來像是可以攪動的東西,並且值得。謝謝。 – TheBlastOne 2011-04-27 12:20:30