【问题标题】:Recursive SQL Query descending递归 SQL 查询降序
【发布时间】:2014-01-05 00:38:03
【问题描述】:

我使用递归查询来识别给定类别 ID 的所有相关子类别。

WITH parent AS ( SELECT ParentId, Title, Id 
                 FROM [CocoDb].[dbo].[Categories] 
                 WHERE Id = @CategoryId),tree AS 
                 ( 
                     SELECT x.ParentId, x.Id, x.Title 
                     FROM [CocoDb].[dbo].[Categories] x 
                     INNER JOIN parent ON x.ParentId = parent.Id
                     UNION ALL 
                     SELECT y.ParentId, y.Id, y.Title 
                     FROM [CocoDb].[dbo].[Categories] y 
                     INNER JOIN tree t ON y.ParentId = t.Id 
                 )
SELECT * FROM Tree

我的桌子是:

Categories (ID INT PRIMARY KEY, ParentId INT, Title VARCHAR(MAX))

SQL Server 的问题:我可以有一个返回所有类别的查询吗?

例如:

  • 书籍(ID:1,父级:0)
  • 恐怖(ID:2,父母:1)
  • Steven King(身份证:3,父母:2)

现在,如果我要求 Steven King (Id 3),我将获得所有相关类别,例如本案例中的书籍和恐怖片。

这可以通过递归 SQL 查询实现吗?

最好的问候

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    测试数据

    DECLARE @Categories TABLE(ID INT PRIMARY KEY, ParentId INT, Title VARCHAR(MAX))
    INSERT INTO @Categories 
    VALUES (1, 0, 'Books'),(2, 1, 'Horro'),(3, 2, 'Steven King')
           ,(4, 3, 'Value 4'),(5, 4, 'Value 5')
    

    查询

    ;WITH ParentCte
     AS 
     ( 
       SELECT   p.ID ,p.ParentId ,p.Title
       FROM     @Categories p
       WHERE    p.Title = 'Steven King'
    
       UNION ALL
    
       SELECT   c.ID ,c.ParentId,c.Title
       FROM     ParentCte cte INNER JOIN @Categories c 
       ON c.ID = cte.ParentId
     )
    SELECT  *
    FROM ParentCte m
    

    结果集

    ╔════╦══════════╦═════════════╗
    ║ ID ║ ParentId ║    Title    ║
    ╠════╬══════════╬═════════════╣
    ║  3 ║        2 ║ Steven King ║
    ║  2 ║        1 ║ Horro       ║
    ║  1 ║        0 ║ Books       ║
    ╚════╩══════════╩═════════════╝
    

    【讨论】:

    • 没问题,很高兴它有帮助:)
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 2020-11-27
    • 2015-07-13
    • 2014-12-19
    • 2012-12-05
    • 2016-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多