sql - 如何获得父母的所有孩子
问题描述
我想从一张桌子上拿走所有含有肉类的东西。将来可以为组(父 ID)创建另一个元素(子 ID),例如现在食物 -> 肉类 -> 动物肉类 -> 猪。将来有人可以创建另一个带有父 ID 猪的记录,例如这种食物 -> 肉类 -> 动物肉 -> 猪 -> 培根,下一个人可以创建另一个带有父 ID 培根等的记录。我如何查询谁会接受最高父级为 MEATS 的所有元素?所以查询应该返回元素猪、牛、培根。
+---------+----------+--------------+
| 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 |
+---------+----------+--------------+
解决方案
递归 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
推荐阅读
- r - 在 Caret 的 train 函数中设置 preProcess 参数如何工作?
- javascript - 在织物画布中编辑组类型的 i-text
- javascript - 是否可以从外部 js 文件访问 Svelte 商店?
- macos - Kafka,等待节点分配的超时?
- java - 根据用户选择的内容从字符串数组列表中显示特定数量的项目
- python - 如何从 DOC(不是 DOCX)获取 XML?
- django - django中具有可编辑单元格的表格
- laravel - 如何在另一个符号链接目录中创建目录的符号链接?
- angular - 无法重定向到菜单离子 5
- python - PyQt 进程输出到 QTextEdit 充满换行符