表层级结构自连接查询:获取指定子节点的多级父节点名称
三级父节点名称查询方案
嘿,针对你要查询childid为53047的父、祖父、曾祖父节点名称的需求,我整理了一个清晰的SQL查询方案,直接就能用:
核心SQL查询语句
SELECT n1.name AS parent_name, n2.name AS grandparent_name, n3.name AS great_grandparent_name FROM hierarchy h1 LEFT JOIN hierarchy h2 ON h1.parentid = h2.childid LEFT JOIN hierarchy h3 ON h2.parentid = h3.childid LEFT JOIN Names n1 ON h1.parentid = n1.location_id LEFT JOIN Names n2 ON h2.parentid = n2.location_id LEFT JOIN Names n3 ON h3.parentid = n3.location_id WHERE h1.childid = 53047;
代码逻辑解释
- 我们通过三次自连接
hierarchy表,逐级向上追溯节点:h1对应目标节点(childid=53047),h1.parentid就是它的父节点h2关联h1的父节点,h2.parentid就是祖父节点h3关联h2的父节点,h3.parentid就是曾祖父节点
- 再分别将这三个父节点的ID和
Names表关联,拿到对应的名称 - 使用
LEFT JOIN是为了避免某一级节点不存在时,整个查询返回空结果(如果确定三级节点都存在,也可以换成INNER JOIN)
预期输出
查询结果会包含三列:
parent_name:目标节点的父节点名称grandparent_name:目标节点的祖父节点名称great_grandparent_name:目标节点的曾祖父节点名称
内容的提问来源于stack exchange,提问作者Mona Addagatla
相关产品推荐
相关产品推荐

