sqlite - 我可以使用递归查询来查询叶子引用另一个表的树吗?
问题描述
我有列“object_id”的行的表 A,以及 2 个 NULL 列 A_id 和 B_id,A 的每一行(在具有相同 object_id 的行中)引用表 A 自身或表 B,即列 A_id 和 B_id 是互斥的。
例如
Table A
object_id A_id B_id
...
1 NULL 5
1 3 NULL
1 NULL 7
3 NULL 2
3 NULL 3
...
Table B
object_id data
...
2 15
3 16
5 17
7 18
...
我的目标是收集属于给定 A object_id(如 1)及其所有后代的所有 B 行中的所有唯一数据。
这可以通过递归 CTE 查询来完成吗?如果是这样,怎么做?
解决方案
首先使用标准的树遍历来收集所有的 A ID。然后将那些与 B 表连接起来:
WITH RECURSIVE A_and_descendants(object_id) AS (
VALUES (1) -- starts here
UNION ALL
SELECT A.A_id
FROM A
JOIN A_and_descendants USING (object_id)
)
SELECT B.data
FROM A
JOIN A_and_descendants USING (object_id)
JOIN B ON A.B_id = B.object_id;
推荐阅读
- ajax - ajax post-Laravel上的状态500内部服务器错误
- kotlin - 将上下文绑定到范围函数以在 Kotlin 中创建函数引用?
- mysql - SQL 解析错误,命令提示符未显示预期输出
- r - 可以使用多小数点增量在 for 循环中递增吗?
- php - 使用输入值修改 DateTimeImmutable
- java - 如何在Android上将焦点设置在EditText的最后一个字符上
- java - 使用 IntelliJ IDEA 部署到 JbossEAP 时,我的应用程序放在哪里?
- sql-server - 根据上次状态统计所有记录
- java - 解析 JSON 对象时出现 StackOverflowError
- java - 更改执行相同操作的字符串的符号 +(如运算符重载)