自连接(Self Join)是指一张表自己和自己进行连接查询,常用于处理层级关系或同一表中相互关联的数据(如员工与上级、分类与父分类、好友关系等)。
SELECT
a.列1, b.列2
FROM
表名 a
JOIN
表名 b
ON
a.关联字段 = b.被关联字段;
关键点:
- 同一张表要起 两个不同的别名(a、b)
- 通过
ON指定“自己和自己怎么关联”
employees
| id | name | manager_id |
SELECT
e.name AS 员工,
m.name AS 上级
FROM
employees e
LEFT JOIN
employees m
ON
e.manager_id = m.id;
✅ 用 LEFT JOIN 可保留没有上级的员工(如 CEO)
categories
| id | name | parent_id |
SELECT
c.name AS 子分类,
p.name AS 父分类
FROM
categories c
LEFT JOIN
categories p
ON
c.parent_id = p.id;
SELECT
a.name,
b.name,
a.city
FROM
users a
JOIN
users b
ON
a.city = b.city
WHERE
a.id < b.id; -- 避免重复配对
| 场景 | 推荐方式 |
|---|---|
| 需要同时展示“双方信息” | 自连接 |
| 只判断是否存在 | 子查询 / EXISTS |
LEFT JOIN(防止数据丢失)如果你有具体表结构或业务场景(比如组织架构、评论回复、订单关联),我可以直接帮你写自连接 SQL。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。