单表自关联查询匹配父级名称的SQL实现方案咨询
自关联表查询父节点名称解决方案
核心实现逻辑
你这个需求属于典型的同表自关联查询场景,表中parent_id字段关联同表的主键id,只需要将表和自身做关联查询,映射出父ID对应的名称即可。
推荐实现方式(自连接写法,兼容性最高)
把原表分别取两个别名,主别名取所有基础字段,关联别名负责映射父ID对应的名称,SQL示例如下:
SELECT t1.id, t1.name, t1.country, t1.parent_id, t2.name AS name_parent_id FROM 你的表名 t1 -- 如果需要保留parent_id为空/不存在的记录用LEFT JOIN,否则用INNER JOIN LEFT JOIN 你的表名 t2 ON t1.parent_id = t2.id ORDER BY t1.id;
代入你提供的测试数据,返回结果和你预期的完全一致:
- id=1的parent_id=2,对应t2的name=Alex
- id=2的parent_id=2,对应t2的name=Alex
- id=3的parent_id=4,对应t2的name=Tony
- id=4的parent_id=1,对应t2的name=Diva
可选实现方式(子查询写法)
如果你更习惯子查询的写法,也可以用关联子查询实现,逻辑和自连接一致:
SELECT id, name, country, parent_id, (SELECT name FROM 你的表名 t2 WHERE t2.id = t1.parent_id) AS name_parent_id FROM 你的表名 t1 ORDER BY id;
内容的提问来源于stack exchange,提问作者Abdul Rosid
相关产品推荐
相关产品推荐

