2013-03-20 131 views
1

如果是作爲2列,和的ParentId和childID的可能有多個層次,如見下表通用遞歸SQL查詢

ParentId ChildId 
    -1    1 
    -1    2 
    1    3 
    3    4 
    4    5 

如果孩子沒有父母它是由-1表示的表格中。

現在,如果我需要父母在最頂層的說5,那麼它的父母是4誰的父母是3誰的父母是1.所以1是答案作爲其父= -1。

我經歷了Sql server CTE and recursion example的討論,看起來很複雜。

從谷歌搜索我知道我們可以使用WITH AS和UNION來實現這一目標,任何人都可以點亮一個通用的SQL,可以得到這個結果嗎?

感謝

Nohsib

+0

到底是什麼,你想要的SQL語句返回的輸出?你想要整個層次嗎?或者只是最高層的家長?如果你想要層次結構,你需要什麼格式?多行?串聯的格式化字符串?還有別的嗎? – 2013-03-20 22:33:38

+0

@賈斯汀:只是最高級別家長的編號 – Nohsib 2013-03-20 23:37:59

回答

4
+0

謝謝葉戈爾。這從sql開發人員工作正常,但通過使用下面的代碼的應用程序它射出異常與SQLCODE = -313,SQLSTATE = 07004 – Nohsib 2013-03-21 03:46:16

+0

屬性props = new Properties(); \t \t props.setProperty(「user」,username); \t \t props.setProperty(「password」,password); \t \t Connection conn = null; \t \t conn = DriverManager.getConnection(url,props); \t \t Statement statement = conn.createStatement(); \t \t \t語句.executeQuery( \t \t 「選擇CONNECT_BY_ROOT(childID的)從t其中childID的= 5開始與的ParentId = -1通過的ParentId =事先childID的連接」); – Nohsib 2013-03-21 03:49:12

+0

@Nohsib - 嘗試爲列添加別名(請參閱我更新的答案)。 – 2013-03-21 13:34:21