在表迭代有列ID,標題和PARENTID。PARENTID用於在同一個表項的ID是考慮它的父 - 因此ParentID爲NULL的任何條目是其本身是父親的一個條目如何通過SQL表,「父母」和孩子」行是在同一個表
我需要一個查詢,它將遍歷每個父級並列出其下的任何子級(理想情況下用連字符或其他表示它的從屬)任何人都知道如何做到這一點或如何指向正確的方向嗎?
(我已經研究過T-SQL並閱讀了許多類似的在線問題,但是我的SQL不夠銳利感覺它,所以我會非常ppreciate一些指針!)
在表迭代有列ID,標題和PARENTID。PARENTID用於在同一個表項的ID是考慮它的父 - 因此ParentID爲NULL的任何條目是其本身是父親的一個條目如何通過SQL表,「父母」和孩子」行是在同一個表
我需要一個查詢,它將遍歷每個父級並列出其下的任何子級(理想情況下用連字符或其他表示它的從屬)任何人都知道如何做到這一點或如何指向正確的方向嗎?
(我已經研究過T-SQL並閱讀了許多類似的在線問題,但是我的SQL不夠銳利感覺它,所以我會非常ppreciate一些指針!)
在這裏,你是語法使用!
WITH n(ID, Title) AS
(SELECT ID, Title
FROM YourTable
WHERE ID = (SELECT TOP 1 ID FROM YourTable WHERE ParentID IS NULL)
UNION ALL
SELECT nplus1.ID, nplus1.Title
FROM YourTable as nplus1, n
WHERE n.ID = nplus1.ParentID)
SELECT ID, Title FROM n
在Oracle
從自引用表得到各層數據,你可以在SQL 2008
WITH n(ID) AS
(SELECT ID FROM YourTable
UNION ALL
SELECT nplus1.ID
FROM YourTable as nplus1, n
WHERE n.ID = nplus1.ParentID)
SELECT ID FROM n
謝謝,這似乎工作!儘管我沒有解釋清楚:理想情況下,它應該列出第一個父母的標題(其中ParentID爲空),然後列出該父母的子女的標題(例如理想地用連字符作爲前綴) – 2012-07-30 11:50:39
- 這是一個CONNECT BY - 也許,讓SQL服務器的線索..不知道 – Randy 2012-07-30 11:38:32
如果你真的想通過一個表進行迭代,編寫一個查詢,並用光標閱讀。但我想,你想有一個查詢返回一個行與其子行。我對嗎? – DHN 2012-07-30 11:38:47
http://msdn.microsoft.com/en-us/library/ms186243(v=sql.105).aspx CTE /遞歸查詢。 – xQbert 2012-07-30 11:46:43