自连接(Self Join)本质上是同一张表自己和自己连接,在 SQL 中通过给表起不同的别名来实现。之所以要用自连接,是因为很多业务数据本身就存在“同一张表内的层级或关联关系”,而普通查询无法表达这种关系。
下面从“为什么需要”和“典型场景”两方面说明。
很多结构是扁平存储的,例如:
这些信息都在同一张表,但要“看关系”,就必须让表“变成两张”来比。
比如:
找出每个员工的主管姓名
员工表和主管其实是同一张表里的不同行,不用自连接做不到。
自连接不是新表,而是:
FROM emp e1
JOIN emp e2 ON e1.manager_id = e2.id
e1:员工e2:主管SELECT
e.name AS 员工,
m.name AS 主管
FROM employee e
LEFT JOIN employee m
ON e.manager_id = m.id;
SELECT
c1.name AS 子分类,
c2.name AS 父分类
FROM category c1
LEFT JOIN category c2
ON c1.parent_id = c2.id;
SELECT
a.month,
a.sales,
b.sales AS 上月销售额
FROM sales a
JOIN sales b
ON a.month = b.month + 1;
SELECT
a.id, b.id
FROM user a
JOIN user b
ON a.phone = b.phone
AND a.id < b.id;
当“关系发生在同一张表内部”时,就用自连接。
它不是特殊技术,而是“把一张表当两张表用”的自然解法。
如果你愿意,我也可以给你画一张“自连接逻辑图”或结合你正在写的 SQL 讲。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。