mysql - 用于获取子节点所有父节点的递归 CTE 查询的 WHERE 语句
问题描述
我有以下数据集,它基本上是所有节点所属的树:
name |id |parent_id
Planet Earth |1 |0
North America|2 |1
Costa Rica |46408|2
Alajuela |46409|46408
Cartago |46410|46408
Guanacaste |46411|46408
Heredia |46412|46408
...
我希望能够查询以获取树中的所有底部节点,以下查询非常适合此:
SELECT *
FROM locations l
WHERE l.id NOT IN (SELECT parent_id FROM locations)
AND l.name LIKE ?
我想以以下格式输出数据:
询问
SELECT *
FROM locations l
WHERE l.id NOT IN (SELECT parent_id FROM locations)
AND l.name LIKE 'he%'
SPOOKY SQL MAGIC GOES HERE...
输出
name |id |parent_id|parents
Heredia|46412|46408 |Planet Earth > North America > Costa Rica
我已经开始自己处理查询,如下所示:
WITH CTE AS (
SELECT id, parent_id, name, CONVERT(VARCHAR(MAX),name) AS parents
FROM locations
WHERE idParent = 0
UNION ALL
SELECT l.id, l.parent_id, l.name, c.parents + ' > ' + CONVERT(VARCHAR(MAX),t.name) AS parents
FROM locations l
INNER JOIN CTE c ON l.idParent = c.id
)
SELECT * FROM CTE
如您所见,我正在使用带有通用表表达式的递归,但我不知道如何组合这两个查询。上面的查询也在整个表上运行。
- 如何将上述 CTE 查询限制为表的子集?
- 如何实现我想要的输出?
解决方案
推荐阅读
- visual-studio-code - How to detect if an editor is a markdown preview?
- javascript - 数组没有在本地存储中被覆盖
- java - 当 RecyclerView 滚动到特定点时(从底部开始并在屏幕中间完成其进度)时为 ProgreessBar 设置动画
- reactjs - 将 Formik JSON 反应为 YAML,然后在提交时返回 JSON
- python - python中具有合理NaN行为的经验CDF函数
- android - 我们可以在 golang android OS 中打开带有传递 URL 的浏览器吗?
- c++ - 不销毁属于联合成员的类类型的对象是否安全?
- python - 如何更正熊猫数据框中的单词?
- openwrt - 在 OpenWRT 路由器上将 PiHole 用于访客网络
- database - Perl 性能缓慢,文件 I/O 问题或由于 while 循环