SQLPathLab
表连接 · 高级

SELF JOIN

同一张表自己关联自己。

简介

SELF JOIN 为同一张表分配两个角色别名,再用父子键或前后关系进行连接,常用于员工—主管、分类层级和相邻记录。别名应体现角色,连接方向也要与业务含义一致;若需保留没有主管的根节点,应把内连接改为 LEFT JOIN。

基础语法

SELECT a.name, b.name FROM employees a JOIN employees b ON a.manager_id = b.id;

示例

SELF JOIN 示例

示例把 employees 分别命名为员工 a 与主管 b,通过 a.manager_id = b.id 返回明确的上下级关系。

示例数据表

表名:employees
employees
idnamemanager_id
1 Alice NULL
2 Bob 1
3 Cindy 1
4 David 2

SQL

SELECT a.name AS employee, b.name AS manager FROM employees a JOIN employees b ON a.manager_id = b.id;

运行结果

result
employeemanager
Bob Alice
Cindy Alice
David Bob

常见问题

为什么自连接必须使用表别名?

同一张表扮演不同角色,别名可以区分当前记录与其父级、前一条或匹配记录,并避免字段歧义。

怎样保留没有上级的根节点?

把当前记录放在左侧并使用 LEFT JOIN;根节点没有匹配上级时,右侧字段为 NULL。

层级深度不固定时还能连续自连接吗?

固定层级可以;深度未知时通常应使用递归 CTE,并加入终止条件和循环数据防护。

标签

表连接

这篇内容是否清楚?