gpt4 book ai didi

sql-server - 在SQL Server中,如何选择递归表中的所有记录?

转载 作者:行者123 更新时间:2023-12-03 16:38:02 24 4
gpt4 key购买 nike

我有一个递归表,其中每条记录都有一个 ID 和一个 PARENTID。 PARENTID 指向同一个表中的不同 ID。 SQL Server 中有没有一种方法可以在一个语句中选择整个“树”?我可以编写一个递归函数来从父级跳转到所有子级,但我想要一种在一个查询中完成它的方法。

在 Oracle 中,它看起来像这样:

select
id,
parentid,
nodename
from
MY_SCHEMA.MY_TABLE
connect by nocycle prior parentid = id
start with id = :starting_id_number
order by
id

SQL Server 的等价物是什么?

最佳答案

这是我为您整理的示例。它演示了使用递归公用表表达式 (CTE)。

CREATE TABLE #tempTable
(
ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
parentID INT NULL
)

INSERT INTO #tempTable (parentID) VALUES (null)
INSERT INTO #tempTable (parentID) VALUES (1)
INSERT INTO #tempTable (parentID) VALUES (1)
INSERT INTO #tempTable (parentID) VALUES (2)
INSERT INTO #tempTable (parentID) VALUES (3)
INSERT INTO #tempTable (parentID) VALUES (2)
INSERT INTO #tempTable (parentID) VALUES (5)


SELECT * FROM #tempTable;

WITH RecursiveTable (ID, ParentID, Level)
AS
(
--Anchor
SELECT tt.ID,
tt.ParentID,
0 AS Level
FROM #tempTable AS tt
WHERE parentID IS null
UNION ALL
--Recursive member definition
SELECT tt.ID,
tt.ParentID,
LEVEL + 1
FROM #tempTable AS tt
INNER JOIN RecursiveTable rt ON
tt.ParentID = rt.ID
)
SELECT *
FROM RecursiveTable

DROP TABLE #tempTable

编辑:作为一个额外的想法,在 SQL Server 2008 中有一种称为 hierarchyid 的数据类型,可用于实现分层数据结构。看下面的教程

http://technet.microsoft.com/en-us/library/bb677213.aspx

关于sql-server - 在SQL Server中,如何选择递归表中的所有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/926033/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com