数据库自连接(Self Join)是指一张表与自身进行连接,常用于处理表中存在“层级关系”或“引用自身”的数据,比如员工与经理、分类与父分类、评论与回复等。
当同一张表中的两行数据存在关联关系时,就需要自连接。
常见场景:
manager_id 指向同一张表的 employee_idparent_id 指向自身自连接本质上是 JOIN,只是同一张表起两个别名。
| employee_id | name | manager_id |
|---|---|---|
| 1 | 张三 | NULL |
| 2 | 李四 | 1 |
| 3 | 王五 | 1 |
| 4 | 赵六 | 2 |
SELECT
e.name AS 员工,
m.name AS 经理
FROM employees e
LEFT JOIN employees m
ON e.manager_id = m.employee_id;
结果:
| 员工 | 经理 |
|---|---|
| 张三 | NULL |
| 李四 | 张三 |
| 王五 | 张三 |
| 赵六 | 李四 |
✅ 注意:
e 是员工表m 是经理表(同一张表)LEFT JOIN 保留没有经理的员工SELECT
m.name AS 经理,
e.name AS 下属
FROM employees m
JOIN employees e
ON e.manager_id = m.employee_id;
SELECT
e1.name AS 员工,
e2.name AS 一级经理,
e3.name AS 二级经理
FROM employees e1
JOIN employees e2 ON e1.manager_id = e2.employee_id
JOIN employees e3 ON e2.manager_id = e3.employee_id;
✅ 必须给表起 不同别名
✅ 连接条件通常是“自身主键 = 外键”
✅ 常用 LEFT JOIN 防止数据丢失
✅ 多层关系可多次自连接(层级越深性能越差)
示例(子查询写法):
SELECT name
FROM employees
WHERE manager_id = (
SELECT employee_id FROM employees WHERE name = '张三'
);
如果你有具体表结构或业务场景(如菜单树、评论回复、组织架构),我可以直接帮你写自连接 SQL。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。