SQL动态查询编写:获取带经理姓名的员工列表
解决自关联员工表的经理姓名查询问题
这是个很常见的自关联表查询场景,咱们用**自连接(Self-Join)**就能轻松实现需求。
首先先确认下你的表结构:
CREATE TABLE employee ( id INTEGER, manager INTEGER, name TEXT, FOREIGN KEY(manager) REFERENCES employee(id) );
核心查询语句
这里咱们给同一个表起两个别名,分别代表「员工」和「经理」,通过manager字段关联起来:
SELECT e.id AS employee_id, e.name AS employee_name, COALESCE(m.name, '无上级经理') AS manager_name -- 可选:把NULL替换成更友好的文本 FROM employee e LEFT JOIN employee m ON e.manager = m.id;
关键细节说明
- 用
LEFT JOIN而不是INNER JOIN:这样能保留所有员工,包括那些没有上级经理(manager字段为NULL)的人。如果只想要有经理的员工,直接把LEFT JOIN换成INNER JOIN即可。 COALESCE函数是可选的:如果不想让无经理的员工显示NULL,可以用这个函数把NULL替换成比如「无上级经理」这类更易读的文本。- 别名的使用:
e代表员工(employee),m代表经理(manager),这样能清晰区分同一个表的两个实例,避免字段混淆。
测试示例
如果插入一些测试数据:
INSERT INTO employee VALUES (1, NULL, 'John Doe'), -- 顶级管理者 (2, 1, 'Jane Smith'), (3, 1, 'Bob Johnson'), (4, 2, 'Alice Williams');
执行查询后会得到这样的结果:
| employee_id | employee_name | manager_name |
|---|---|---|
| 1 | John Doe | 无上级经理 |
| 2 | Jane Smith | John Doe |
| 3 | Bob Johnson | John Doe |
| 4 | Alice Williams | Jane Smith |
内容的提问来源于stack exchange,提问作者SachithR
相关产品推荐
相关产品推荐

