MySQL 内连接同一张表
MySQL INNER JOIN 用于在基于相关列的两个或多个表之间获取行。但是,您知道可以使用 INNER JOIN 连接同一名称的表吗?这称为 self-join 或递归连接。
阅读更多:MySQL 教程
语法
同一张表的 INNER JOIN 的语法如下:
SELECT table1.column1, table2.column2...
FROM table table1
INNER JOIN table table2
ON table1.column_name=table2.column_name;
示例
考虑一个名为 employee 的表,包含以下列:
- id: int(11)(主键)
- name: varchar(50)
- age: int(11)
- manager_id: int(11)(外键指向 employee.id)
假设我们想要检索员工及其对应经理的姓名。使用 MySQL INNER JOIN self-join 实现此目的的查询如下:
SELECT e.name, m.name AS manager_name
FROM employee e
INNER JOIN employee m
ON e.manager_id = m.id;
在上面的查询中,我们为同一张表创建了两个别名 – employee e 和 employee m。然后,我们根据 employee.manager_id 和 manager.id 列将两个表连接起来。最后,我们使用别名选择了员工姓名和经理姓名。
应用场景
Self-join 可用于希望将表与其自身副本联接以检索某些数据的情况。以下是一些使用案例:
- 层次结构:Self-join 可用于通过将包含层次结构元素的表与其自身联接来表示分层数据。
- 记录之间的关系:一个表可以包含与同一表中的其他记录相关联的记录。Self-join 可用于检索这些关系。
总结
MySQL INNER JOIN same table(self-join)可用于在同一张表的记录之间基于关系检索数据的场景。通过正确的语法和理解,self-join 可以使复杂查询更易管理。