**数据库自连接(Self Join)**是指一张表与它自身进行连接,在 SQL 中通常借助表别名来实现。
简单来说:当“数据之间的关系存在于同一张表内部”时,就需要用自连接。
下面从使用场景、典型例子、注意事项三个角度说明。
同一张表中,某一行引用了同一张表的另一行。
常见例子:
✅ 典型场景:查“员工和他的经理是谁”
SELECT e.name AS 员工, m.name AS 经理
FROM employee e
JOIN employee m
ON e.manager_id = m.id;
需要在同一表中做“行与行之间”的比较。
例子:
✅ 例子:同一部门中,工资高于同事的人
SELECT a.name, a.salary
FROM employee a
JOIN employee b
ON a.dept_id = b.dept_id
AND a.salary > b.salary;
在同一张表中生成两两组合。
例子:
SELECT a.name, b.name
FROM student a
JOIN student b
ON a.id < b.id;
(用 < 避免重复配对)
自连接适合层级不深的情况(如 2~3 层)。
SELECT c1.name, c2.name, c3.name
FROM category c1
JOIN category c2 ON c2.parent_id = c1.id
JOIN category c3 ON c3.parent_id = c2.id;
⚠️ 如果层级很深(无限级),更推荐:
WITH RECURSIVE)FROM table t1
JOIN table t2
否则会变成笛卡尔积,性能灾难。
当“关系发生在一张表内部”,比如上下级、前后记录、两两比较,就用自连接。
如果你有具体业务场景(比如员工、订单、评论),我可以直接帮你写自连接 SQL。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。