【问题标题】:How to name child elements of a parent element by value? SQL server如何按值命名父元素的子元素? SQL 服务器
【发布时间】:2017-12-14 08:07:45
【问题描述】:

请告诉我一个如何将所有子节点标记为父 ID 的示例。只需要标记其父级具有值"need" 的那些分支(参见示例图像)。使用递归查询,不可能重命名特定父级的所有子级...

初始数据:

+-----+----------+----------+
| id  | parentid | selector |
+-----+----------+----------+
|  1  |          |          |
|  2  | 1        |          |
|  3  | 1        | need     |
|  4  | 2        |          |
|  5  | 2        | need     |
|  6  | 3        |          |
|  7  | 5        |          |
|  8  | 5        |          |
|  9  | 6        |          |
+-----+----------+----------+

需要数据:

+-----+----------+----------+----------------+
| id  | parentid | selector | parentSelector |
+-----+----------+----------+----------------+
|  1  | null     |          | null           |
|  2  | 1        |          | null           |
|  3  | 1        | need     | 3              |
|  4  | 2        |          | null           |
|  5  | 2        | need     | 5              |
|  6  | 3        |          | 3              |
|  7  | 5        |          | 5              |
|  8  | 5        |          | 5              |
|  9  | 6        |          | 3              |
+-----+----------+----------+----------------+

任务是按照父元素的值为"need" 的元素进行分组。我想,我应该创建一个带有标记的列,如上表中的示例,还是有其他选择?

我用SQL Server 2012

【问题讨论】:

    标签: sql binary-tree hierarchy


    【解决方案1】:

    我不知道它是否适用于 Sql server 2012,但我发现了这个 microsoft,我认为这是你想要的,为了使 parentSelector 有条件,我使用 CASE (Transact-SQL)。

    这是另一个例子:stackoverflow question

    【讨论】:

    • 问题在于,在节点 9 上进行分层选择时,我们不知道节点 3,并且通过 CASE 我们无法跟踪...
    • 如果我理解了这个问题,你需要循环加入,就像这样stackoverflow join。这可以允许你想要的,但是如果表比这大,这会使服务器变慢。
    • 我不认为这是一个好的解决方案,因为结构(真正的树)比这个例子更大。不过谢谢大家的帮助,我会熟悉这个方法的
    猜你喜欢
    • 2013-03-19
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 2018-11-15
    相关资源
    最近更新 更多