[英]Select hierarchy from table
我有一個表ServiceItem,它具有Id,ParentId和一些屬性,例如Name,Description等。 層次結構的最大級別為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來做到這一點。
它與這個問題有所不同,因為我需要獲取一堆行,不僅查詢中的路徑和條件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
有關更深入的示例,請參閱此問答
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
這是一個很好的查詢,但我也發現了這一點:
SELECT
*
FROM ServiceItem si
WHERE si.Name = '123'
OR EXISTS (
SELECT
*
FROM ServiceItem si2
WHERE si2.Name = '123'
and si2.ParentId = si.Id
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.