gpt4 book ai didi

sql-server - 需要 SQL Server 中特定父记录的整个子链

转载 作者:搜寻专家 更新时间:2023-10-30 19:45:07 27 4
gpt4 key购买 nike

我们想根据来自 SQL Server 的 ID 获取特定记录的总 TREE 结构(下链)。

这是我的数据表结构:

-----------------------------------------------------------------
CHILD_CODE PARENT_CODE CHILD_RANK PARENT_RANK
-----------------------------------------------------------------
1 Null 1 Null
2 1 2 1
3 1 2 1
4 1 2 1
5 2 3 2
6 2 3 2
7 3 3 2
8 5 4 3

在这里,我需要为父项获取整个子树。意味着如果我给 2 作为父输入,它将把它下面的所有 child 作为一棵树给我,直到最后。例子... 1

输入 > PARENT_CODE = 2

输出>

----------------------------------------------
PARENT_CODE CHILD_CODE CHILD_RANK
----------------------------------------------
2 5 3
2 6 3
2 8 4
----------------------------------------------

这里我们使用了CET like

; WITH rekurs AS (
SELECT child_code, child_rank
FROM tbl
WHERE parent_code = 2
UNION ALL
SELECT ch.child_code, ch.child_rank
FROM tbl ch
JOIN rekurs r ON ch.parent_code = r.child_code
)
SELECT 2 AS PARENT_CODE, child_code, child_rank
FROM CTE

我们已经在程序中添加了这个 CTE,但是我们正在处理大量记录,我们面临一些问题。在此 CTE 中,我们将传递一个 parent_code,我们将为其获取该特定代码的所有子代码。

这里我们想要获取 30,000 个 parent_code 的所有子代码,这在我们从 C# 程序的 for 循环中将 parent_code 一个一个地传递给 CTE 时花费了很多时间。有什么办法可以解决这个问题吗?

最佳答案

你可以使用下面的代码

假设你的表名是data 那么:

declare @input int =2
;with report as(
select ChildCode,ParentCode,ChildRank,ParentRank
from data
where ParentCode = @input
union all
select d.ChildCode,d.ParentCode,d.ChildRank,d.ParentRank
from data d
inner join report r on d.ParentCode = r.ChildCode
)

select * from report

这里是工作 demo

结果

ChildCode   ParentCode  ChildRank   ParentRank
5 2 3 2
6 2 3 2
8 5 4 3

根据以下评论编辑

解释

  1. 您可以创建用户定义的表类型

    将 ParentInputs 类型创建为表(ParentCode int)

  2. 您将表类型参数传递给查询

查询

;with report as(
select ChildCode,d.ParentCode,ChildRank,ParentRank
from @data d
inner join @input p on d.ParentCode = p.ParentCode
union all
select d.ChildCode,d.ParentCode,d.ChildRank,d.ParentRank
from @data d
inner join report r on d.ParentCode = r.ChildCode
)
select * from report order by ParentCode

为了演示,我创建了一个参数表而不是表类型,请找到工作demo

ParentCode (2,3) 的结果

ChildCode   ParentCode  ChildRank   ParentRank
5 2 3 2
6 2 3 2
7 3 3 2
8 5 4 3

希望对你有帮助

关于sql-server - 需要 SQL Server 中特定父记录的整个子链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47649355/

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