【问题标题】:How to show all recursive results with hierarchyid sql如何使用hierarchyid sql显示所有递归结果
【发布时间】:2011-03-30 09:04:17
【问题描述】:

我有一张桌子categories

 ID | NAME                  | PARENT ID    | POSITION   | LEVEL     | ORDER
 ----------------------------------------------------------------------------
 1  | root                  | -1           | 0x         | 0         | 255
 2  | cars                  | 1            | 0x58       | 1         | 10
 5  | trucks                | 1            | 0x68       | 1         | 10
 13 | city cars             | 2            | 0x5AC0     | 2         | 255
 14 | offroad cars          | 2            | 0x5B40     | 2         | 255

地点:

 ID int ident 
 NAME nvarchar(255)
 PARENT ID int
 POSITION hierarchyid
 LEVEL hierarchyid GetLevel()
 ORDER tinyint

此表model 指定其所属的型号名称和类别。示例:

 ID  | NAME      | CATEGORY
 -----------------------------
 1   | Civic     | 13
 2   | Pajero    | 14
 3   | 815       | 5
 4   | Avensis   | 13

地点:

 ID int ident
 NAME nvarchar(255)
 CATEGORY int link to ID category table

我想做的是能够展示:

  1. 所有模型 - 将从根递归显示所有模型,
  2. cars 类别中的车型(包括汽车)
  3. 城市汽车的模型(或其子系统,如果有的话)

如何使用 hierarchyid 进行此类过滤以及如何将结果与模型连接到表格中?这是如何从某个级别显示所有模型结果的快速方法吗?

【问题讨论】:

    标签: tsql recursion hierarchyid


    【解决方案1】:

    我相信这会给你想要的东西:

    declare @id hierarchyid
    
    select @id = Position from Categories where Name = 'root' -- or 'cars', 'city cars', etc.
    
    select m.* 
    from Models m 
        join Categories c on m.Category = c.ID
    where c.Position.IsDescendantOf(@id) = 1
    

    有关IsDescendantOf 方法和其他hierarchyid 方法的更多信息,请查看method reference

    【讨论】:

      【解决方案2】:

      您将要使用 CTE:公用表表达式

      http://www.4guysfromrolla.com/webtech/071906-1.shtml

      在 SQL 2005 中引入了允许一种简单的方法来处理分层或递归关系。

      这与您的示例非常接近:

      http://www.sqlservercurry.com/2009/06/simple-family-tree-query-using.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-30
        • 1970-01-01
        • 2011-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多