gpt4 book ai didi

sql-server-2008 - 如何在查询中使用递归获取父级的所有子级,然后获取其子级

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

我的结构是这样的:

<Unit>
<SubUnit1>
<SubSubUnit1/>
<SubSubUnit2/>
...
<SubSubUnitN/>
</SubUnit1/>
<SubUnit2>
<SubSubUnit1/>
<SubSubUnit2/>
...
<SubSubUnitN/>
</SubUnit2/>
...
<SubUnitN>
<SubSubUnit1/>
<SubSubUnit2/>
...
<SubSubUnitN/>
</SubUnitN/>
</Unit>

该结构有 3 个级别:主单元、子单元和子子单元。

我想按 UnitId 选择所有子项。
如果我按单位搜索,我必须获取所有树。
如果我按 SubUnit1 搜索,则必须获取 SubUnit1 以及 SubUnit1 的所有子级。
如果我搜索 SubSubUnit2,我必须得到它本身。

这是我的尝试:

with a(id, parentid, name)
as (
select id, parentId, name
from customer a
where parentId is null
union all
select a.id, a.parentid, a.Name
from customer
inner join a on customer.parentId = customer.id
)
select parentid, id, name
from customer pod
where pod.parentid in (
select id
from customer grbs
where grbs.parentid in (
select id
from customer t
where t.parentid = @UnitId
))
union
select parentid, id, name
from customer grbs
where grbs.parentid in (
select id
from customer t
where t.parentid = @UnitId
)
union
select parentid, id, name
from customer c
where c.Id = @UnitId
order by parentid, id

我使用了 3 个联合词,虽然不太好,但很有效。 Case 结构有 N 个级别,我如何才能得到正确的结果?

最佳答案

DECLARE @Id int = your_UnitId
;WITH cte AS
(
SELECT a.Id, a.parentId, a.name
FROM customer a
WHERE Id = @Id
UNION ALL
SELECT a.Id, a.parentid, a.Name
FROM customer a JOIN cte c ON a.parentId = c.id
)
SELECT parentId, Id, name
FROM cte

演示 SQLFiddle

关于sql-server-2008 - 如何在查询中使用递归获取父级的所有子级,然后获取其子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13857329/

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