如何通过SQL查询提取表中的嵌套层级关系
解决层级表父级名称替换的SQL方案
这其实是个很典型的**自连接(Self-Join)**场景,用简单的LEFT JOIN就能完美实现你的需求,我给你一步步拆解下怎么做:
1. 先确认表结构与测试数据
假设你的表名为YourTable,先把示例数据落地方便测试:
-- 创建示例表 CREATE TABLE YourTable ( ID INT PRIMARY KEY, Name VARCHAR(50), ParentId INT NULL ); -- 插入示例数据 INSERT INTO YourTable (ID, Name, ParentId) VALUES (1, 'Root', NULL), (2, 'Top', NULL), (3, 'Sub1', 1), (4, 'Sub2', 2);
2. 核心查询语句
用左连接关联表自身,把父级的Name字段映射过来:
SELECT child.ID, child.Name, parent.Name AS ParentName FROM YourTable child LEFT JOIN YourTable parent ON child.ParentId = parent.ID;
3. 为什么用LEFT JOIN?
这里必须用LEFT JOIN而不是INNER JOIN:
- 内连接会过滤掉
ParentId为NULL的行(也就是Root和Top这两条根节点数据) - 左连接会保留所有子表的行,当没有匹配的父级时,
ParentName会自动显示为NULL,完全符合你期望的结果格式。
执行结果
运行上面的查询后,会得到你想要的输出:
| ID | Name | ParentName |
|---|---|---|
| 1 | Root | NULL |
| 2 | Top | NULL |
| 3 | Sub1 | Root |
| 4 | Sub2 | Top |
内容的提问来源于stack exchange,提问作者Esab
相关产品推荐
相关产品推荐

