数据库自连接(Self Join)是指一张表自己和自己进行连接查询。之所以要用自连接,是因为表中某一行的数据需要参考同一张表中的其他行来进行比较、关联或层级查询。
下面从“为什么要用”和“典型场景”两方面说明:
很多业务数据在同一张表里存在层级或关联关系,例如:
如果只用单表查询:
自连接的本质就是:
把同一张表逻辑上当成两张表来用,通过别名区分。
SELECT e.name AS 员工, m.name AS 经理
FROM employee e
LEFT JOIN employee m
ON e.manager_id = m.id;
employee 表SELECT c.name, p.name AS 父分类
FROM category c
LEFT JOIN category p
ON c.parent_id = p.id;
SELECT a.id, b.id
FROM orders a
JOIN orders b
ON a.user_id = b.user_id
AND a.id < b.id;
SELECT t1.date, t2.date
FROM sales t1
JOIN sales t2
ON t2.date = t1.date + 1;
| 方式 | 特点 |
|---|---|
| 自连接 | 适合“行对行”比较,结果清晰 |
| 子查询 | 适合“是否存在 / 聚合”判断 |
很多时候自连接可读性更好、执行计划更优。
当一张表里的数据需要和“同一张表里的另一行数据”发生关系时,就用自连接。
如果你愿意,我可以给你一个具体业务表结构,直接写自连接 SQL 示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。