gpt4 book ai didi

sql - 从表中选择层次结构

转载 作者:行者123 更新时间:2023-12-05 03:10:00 25 4
gpt4 key购买 nike

我有一个表 ServiceItem,其中包含 Id、ParentId 和一些属性,如名称、描述等。层次结构的最大级别为 2。我需要一个查询来选择具有某些条件的行,例如 Name = '123' 及其父行以获得如下所示:

Id  ParentId  Name
1 NULL '12'
2 1 '123'

我试过这个:

SELECT
*
FROM ServiceItem si
WHERE si.Name = '123'
OR EXISTS (
SELECT
*
FROM ServiceItem syst
JOIN ServiceItem si2
ON si2.ParentId = syst.Id
WHERE syst.Id = si.ParentId
AND si2.Name = '123'

)

但它返回父级及其所有子级。是否有机会通过一个查询来完成?我正在使用 T-SQL 来完成它。

它不同于this question因为我需要获取一堆行,而不仅仅是路径 ID 和查询中的条件可能不同。

最佳答案

您可以通过递归使用公用表表达式:

WITH cte AS
(
SELECT *
FROM ServiceItem
WHERE Name = '123'
UNION ALL
SELECT *
FROM ServiceItem si
INNER JOIN cte
ON cte.ParentId = si.Id
)
SELECT * FROM cte

有关更深入的示例,请参阅 this Q&A

关于sql - 从表中选择层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41392752/

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