MySQL中如何对两张互有外键的表执行双向关联JOIN查询
解决方案
核心实现思路:给同一张employee表设置两个不同的别名,分别对应普通员工和分支经理两个角色,按顺序链式编写JOIN语句即可实现需求,不需要单独定义多个左表,第一次JOIN生成的结果集可以直接作为第二次JOIN的左表使用。
可用SQL示例
SELECT e.first_name AS employee_name, e.branch_id, b.branch_name, b.mgr_id, m.first_name AS manager_name FROM employee e INNER JOIN branch b ON e.branch_id = b.branch_id INNER JOIN employee m ON b.mgr_id = m.emp_id;
逻辑说明
- 我们给
employee表定义了两个独立别名:e代表普通员工维度的表数据,m代表分支经理维度的表数据,两个别名指向同一张物理表,但关联逻辑完全独立互不干扰 - 第一次关联:以
e(普通员工表)为初始左表,关联branch表b,通过e.branch_id = b.branch_id匹配员工所属的分支信息 - 第二次关联:以第一次关联得到的
e + b联合结果集为左表,关联别名m的员工表,通过b.mgr_id = m.emp_id匹配该分支对应的经理信息 - 最后取值时,员工姓名从
e表取,经理姓名从m表取,完全避免同名字段冲突
可选调整
如果需要保留没有分配分支的员工、或者没有指定经理的分支数据,可以把INNER JOIN替换为LEFT JOIN,避免有效数据被过滤。
内容的提问来源于stack exchange,提问作者Hargunbeer Singh
相关产品推荐
相关产品推荐

