【问题标题】:How to get all childs of parent [duplicate]如何获得父母的所有孩子[重复]
【发布时间】:2019-10-14 00:45:32
【问题描述】:

我想从一张桌子上拿走所有包含肉类的东西。将来可以为组(父 ID)创建另一个元素(子 ID),例如现在食物 -> 肉类 -> 动物肉类 -> 猪。将来有人可以创建另一个带有父 ID 猪的记录,例如这个食物 -> 肉类 -> 动物肉 -> 猪 -> 培根,下一个人可以创建另一个带有父 ID 培根等的记录。 我如何进行查询,其将采用最高父级为 MEATS 的所有元素?所以查询应该返回元素 pig、cow、bacon。

+---------+----------+--------------+
| childId | parentId | name         |
+---------+----------+--------------+
| 1       | 0        | FOOD         |
+---------+----------+--------------+
| 2       | 1        | FRUITS       |
+---------+----------+--------------+
| 3       | 1        | VEGETABLES   |
+---------+----------+--------------+
| 4       | 1        | MEATS        |
+---------+----------+--------------+
| 5       | 2        | apple        |
+---------+----------+--------------+
| 6       | 2        | banana       |
+---------+----------+--------------+
| 7       | 3        | carrot       |
+---------+----------+--------------+
| 8       | 3        | tomatoes     |
+---------+----------+--------------+
| 9       | 4        | FISH MEATS   |
+---------+----------+--------------+
| 10      | 4        | ANIMAL MEATS |
+---------+----------+--------------+
| 11      | 9        | cod          |
+---------+----------+--------------+
| 12      | 9        | salmon       |
+---------+----------+--------------+
| 13      | 10       | cow          |
+---------+----------+--------------+
| 14      | 10       | pig          |
+---------+----------+--------------+

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    递归 CTE(通用表表达式)可以完成这项工作:

    with
    x as (
      select childId, parentId, name from t where id = 3
      union all
      select t.childId, t.parentId, t.name
      from x
      join t on t.parentId = x.childId
    )
    select * from x
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      相关资源
      最近更新 更多