数据库自连接(Self Join) 是指**一张表与自己进行连接(Join)**的查询方式。
从语法上看,它本质上还是 INNER JOIN、LEFT JOIN 等普通连接,只是连接的双方是同一张表,因此在写 SQL 时必须给表起不同的别名来区分“左表”和“右表”。
当数据之间的关系存在于同一张表内时,就需要自连接。
典型场景:
SELECT a.列, b.列
FROM 表名 a
JOIN 表名 b
ON a.某字段 = b.某字段;
a 和 b 是同一张表的两个“副本”
表:employees
| id | name | manager_id |
|---|---|---|
| 1 | 张三 | NULL |
| 2 | 李四 | 1 |
| 3 | 王五 | 1 |
查询:每个员工及其经理姓名
SELECT
e.name AS 员工,
m.name AS 经理
FROM employees e
LEFT JOIN employees m
ON e.manager_id = m.id;
结果:
| 员工 | 经理 |
|---|---|
| 张三 | NULL |
| 李四 | 张三 |
| 王五 | 张三 |
表:category
| id | name | parent_id |
|---|---|---|
| 1 | 电子 | NULL |
| 2 | 手机 | 1 |
| 3 | 电脑 | 1 |
SELECT
c.name AS 子分类,
p.name AS 父分类
FROM category c
LEFT JOIN category p
ON c.parent_id = p.id;
✅ 同一张表
✅ 必须起别名
✅ 常用于层级 / 关联关系
❌ 数据量大时性能需注意(可加索引)
如果你愿意,我也可以帮你写具体业务的自连接 SQL,或者讲**递归查询(如 MySQL 8 的 WITH RECURSIVE)**来处理树形结构。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。