You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两个查询以获取父节点的子节点及孙节点结果?

合并查询获取子节点与孙节点的Test数据

我来帮你搞定这个合并查询的问题!先明确你的核心需求:从course类型的父节点(对应object_data里obj_id=3217的记录)出发,同时获取它的直接子节点中的test(tst类型),以及孙节点中的test,并把这两部分结果合并成一个统一数据集。

先把你的表结构清晰列出来方便参考:

表结构

object_data表

obj_idtypetitle
3217crsit
3221grpxyz
3228tsttest
3264tsttest3

object_reference表

ref_idobj_id
3373217
3383221
3433228
3713264

tree表

treechildparent
1338337
2343338

注:这里我补全了第二条记录的parent为338,也就是grp类型节点对应的ref_id,这样逻辑上343就是孙节点的ref_id,如果实际数据不同,你只需要替换成对应值即可

合并查询方案

你可以用UNION ALL(保留所有结果,包括重复项)或者UNION(自动去重)来合并两个查询的结果,分别获取子节点和孙节点的test数据。

完整SQL代码

-- 获取直接子节点中的test数据
SELECT od.obj_id, od.type, od.title
FROM object_data od
JOIN object_reference ore ON od.obj_id = ore.obj_id
JOIN tree t ON ore.ref_id = t.child
WHERE t.parent = (SELECT ref_id FROM object_reference WHERE obj_id = 3217) -- 定位course节点的ref_id
  AND od.type = 'tst'

UNION ALL

-- 获取孙节点中的test数据
SELECT od.obj_id, od.type, od.title
FROM object_data od
JOIN object_reference ore ON od.obj_id = ore.obj_id
JOIN tree t1 ON ore.ref_id = t1.child
JOIN tree t2 ON t1.parent = t2.child
WHERE t2.parent = (SELECT ref_id FROM object_reference WHERE obj_id = 3217) -- 定位course节点的ref_id
  AND od.type = 'tst';

代码解释

  1. 子节点查询部分:

    • 先通过子查询找到course节点(obj_id=3217)对应的ref_id(也就是337)
    • 关联tree表找到所有父节点是337的子节点ref_id
    • 最后关联object_reference和object_data,筛选出类型为tst的记录
  2. 孙节点查询部分:

    • 多关联了一层tree表(t2),先找到course的子节点ref_id,再找到这些子节点的子节点(孙节点)的ref_id
    • 同样关联到object_reference和object_data筛选tst类型记录
  3. UNION ALL vs UNION:如果你的树形结构中不存在同一个test节点既是子节点又是孙节点的情况,用UNION ALL效率更高;如果担心有重复数据,可以换成UNION,它会自动去重。

内容的提问来源于stack exchange,提问作者ixia sai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:33:08