gpt4 book ai didi

sql - SQL Server 2005 中的分层查询

转载 作者:行者123 更新时间:2023-12-04 12:53:51 25 4
gpt4 key购买 nike

当我在 Oracle 商店工作时,我认为 CONNECT_BY 是理所当然的。现在我被困在使用 SQL Server 2005 并且有一些讨厌的对象层次结构。具体来说,我们有一个自引用表,其中所有子记录都有一个带有其父 ID 的列。目前,我们有一个 View 将 child 映射到层次结构中的级别,还有一个讨厌的查询,可以完成繁重的工作以将 parent 与 child 联系起来。虽然这种方法有效,但它远非优雅和臭味。我只是好奇其他人如何从 SQL Server 2005 中检索分层数据。

最佳答案

这将创建典型的层次表并使用 CTE 来选择层次结构并为每个项目创建路径。

CREATE TABLE tblHierarchy (ID int, ParentID int NULL, Name varchar(128));

INSERT INTO tblHierarchy VALUES (1, NULL, '1');
INSERT INTO tblHierarchy VALUES (2, NULL, '2');
INSERT INTO tblHierarchy VALUES (3, NULL, '3');
INSERT INTO tblHierarchy VALUES (4, 1, '1.1');
INSERT INTO tblHierarchy VALUES (5, 1, '1.2');
INSERT INTO tblHierarchy VALUES (6, 4, '1.1.1');

WITH Parent AS
(
SELECT
ID,
ParentID,
Name AS Path
FROM
tblHierarchy
WHERE
ParentID IS NULL

UNION ALL

SELECT
TH.ID,
TH.ParentID,
CONVERT(varchar(128), Parent.Path + '/' + TH.Name) AS Path
FROM
tblHierarchy TH
INNER JOIN
Parent
ON
Parent.ID = TH.ParentID
)
SELECT * FROM Parent

输出:
ID  ParentID    Path
1 NULL 1
2 NULL 2
3 NULL 3
4 1 1/1.1
5 1 1/1.2
6 4 1/1.1/1.1.1

关于sql - SQL Server 2005 中的分层查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/235515/

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