如何同时显示子节点与孙节点?SQL查询仅获孙节点标题求助
解决方案:同时获取子节点与孙节点的标题
我来帮你调整查询语句,让它能同时返回子节点和孙节点的标题~
你的原查询只关联到了孙节点的object_data表,缺少了子节点对应的对象数据关联,所以拿不到子节点标题。下面是修改后的两种方案:
方案1:仅返回有符合条件孙节点的子节点信息
这个方案会只显示那些存在type='tst'孙节点的子节点,用显式JOIN让逻辑更清晰:
SELECT h.title AS 子节点标题, g.title AS 孙节点标题 FROM object_data a JOIN object_reference b ON a.obj_id = b.obj_id JOIN tree c ON b.ref_id = c.parent JOIN object_reference d ON c.child = d.ref_id JOIN object_data h ON d.obj_id = h.obj_id -- 新增:关联子节点的对象数据 JOIN tree e ON d.ref_id = e.parent JOIN object_reference f ON e.child = f.ref_id JOIN object_data g ON f.obj_id = g.obj_id WHERE g.type = 'tst' AND a.obj_id = 3217;
方案2:返回所有子节点(含无匹配孙节点的情况)
如果需要展示所有子节点(哪怕没有符合type='tst'的孙节点),可以用LEFT JOIN配合COALESCE处理空值:
SELECT h.title AS 子节点标题, COALESCE(g.title, '无匹配孙节点') AS 孙节点标题 FROM object_data a JOIN object_reference b ON a.obj_id = b.obj_id JOIN tree c ON b.ref_id = c.parent JOIN object_reference d ON c.child = d.ref_id JOIN object_data h ON d.obj_id = h.obj_id LEFT JOIN tree e ON d.ref_id = e.parent LEFT JOIN object_reference f ON e.child = f.ref_id LEFT JOIN object_data g ON f.obj_id = g.obj_id AND g.type = 'tst' -- 将type条件移到JOIN中,避免过滤子节点 WHERE a.obj_id = 3217;
关键修改点
- 新增了
object_data h的关联,通过d.obj_id = h.obj_id获取子节点的对象信息,从而拿到子节点标题 - 把原查询的隐式JOIN改成显式
JOIN ... ON,逻辑更直观,后续维护也更方便
内容的提问来源于stack exchange,提问作者Gautham Goud
相关产品推荐
相关产品推荐

