簡體   English   中英

從表中選擇層次結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM