理解数据库自连接(Self Join),可以从“它是什么、为什么用、怎么写、常见场景”几个角度来把握。
自连接:一张表和自己进行连接(JOIN)。
从语法上看,它并不是一种特殊的 JOIN 类型,而是把同一张表当作两张表来用,通常通过表别名区分。
SELECT a.col, b.col
FROM table AS a
JOIN table AS b
ON a.x = b.y;
很多业务数据在同一张表里存在层级或关联关系,例如:
这些数据不在两张表,而在一张表里,就必须用自连接。
employees
-----------
id
name
manager_id -- 上级的员工id
查出:员工姓名 + 其上级姓名
SELECT
e.name AS employee,
m.name AS manager
FROM employees e
LEFT JOIN employees m
ON e.manager_id = m.id;
这里:
e表示“员工”m表示“上级”- 实际上是同一张表
否则数据库分不清“哪个是你,哪个是我”。
✅ 正确:
FROM emp a JOIN emp b
❌ 错误:
FROM emp JOIN emp
例如:
parent_id = idreply_to = comment_idprev_id = id因为:
LEFT JOIN ...
例如:找出“工资比自己经理高”的员工
SELECT e.name
FROM employees e
JOIN employees m
ON e.manager_id = m.id
WHERE e.salary > m.salary;
例如:和“上一条记录”比较
SELECT a.id, b.id
FROM logs a
JOIN logs b
ON a.id = b.id + 1;
自连接:
子查询:
例如“查上级姓名”:
自连接就是:用同一张表,假装成两张表,通过别名和自身字段关联,解决“表里套表”的问题。
如果你愿意,我也可以用图示或**具体业务表(订单 / 评论 / 分类)**再讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。