4
你如何對錶執行迭代查詢?我有一個簡單的表,它由一個:
KeyField, childID, parentID
與childID的開始,我想拉的parentID,然後再次查詢,看是否父母(也就是現在的孩子)都有自己的父母,工作通過完整的層次結構,我該怎麼做?
的Microsoft SQL Server,版本號09.00.3042
你如何對錶執行迭代查詢?我有一個簡單的表,它由一個:
KeyField, childID, parentID
與childID的開始,我想拉的parentID,然後再次查詢,看是否父母(也就是現在的孩子)都有自己的父母,工作通過完整的層次結構,我該怎麼做?
的Microsoft SQL Server,版本號09.00.3042
在SQL Server 2005及更高版本,你最好使用遞歸CTE(公共表表達式)對於這種查詢。 (在SQL 2000和更早版本中,您僅限於使用遞歸存儲過程)。
像下面的內容就是你需要:
WITH ParentChildRels (ParentId, ChildId, KeyField, HierarchyLevel) AS
(
-- Base case
SELECT
ParentId,
ChildId,
KeyField,
1 as HierarchyLevel
FROM Records
WHERE ChildId = @ChildId
UNION ALL
-- Recursive step
SELECT
r.ParentId,
r.ChildId,
r.KeyField,
pr.HierarchyLevel + 1 AS HierarchyLevel
FROM Records r
INNER JOIN ParentChildRels pr ON
r.ParentId = pr.ParentId
)
SELECT *
FROM ParentChildRels
ORDER BY HierarchyLevel, ParentId, ChildId, KeyField
遞歸WITH是用於處理遞歸查詢的ANSI標準,但支持是有限。 Oracle支持11g中的遞歸WITH,但WITH支持9i +並且它有自己的分層語法。 – 2010-01-08 06:13:28
把你重複的挑:http://stackoverflow.com/search?q=recursive+cte – 2010-01-08 05:51:11
特別:http://stackoverflow.com /問題/ 1709397 /遞歸函數在SQL服務器2005年 – 2010-01-08 05:53:15
是的,大量的重複 - 雖然這是一個惱人的情況下,除非知道遞歸CTE,人們可能不知道搜索條件使用。 – 2010-01-08 05:54:50