Dim*_*dko 4 sql t-sql sql-server recursive-query hierarchical-data
我有一个表 ServiceItem,其中包含 Id、ParentId 和一些属性,例如名称、描述等。层次结构的最大级别为 2。我需要一个查询来选择具有某些条件的行,例如Name = '123'及其父行,以获得如下结果:
Id ParentId Name
1 NULL '12'
2 1 '123'
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这个:
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'
)
Run Code Online (Sandbox Code Playgroud)
但它返回父级及其所有子级。有没有机会通过一个查询来完成它?我正在使用 T-SQL 来做到这一点。
它与这个问题不同,因为我需要获取一堆行,不仅是路径 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
Run Code Online (Sandbox Code Playgroud)
有关更深入的示例,请参阅此问答
| 归档时间: |
|
| 查看次数: |
15023 次 |
| 最近记录: |