如何关联Employees等四张表查询指定员工相关字段?
关联查询实现方案
首先需要明确几个关联逻辑,同时注意Jobs表当前结构没有与其他表的公共关联字段,这会导致无法将职位描述与特定员工精准关联,以下分两种场景给出解决方案:
场景1:表结构存在遗漏(合理业务场景)
通常员工与职位是一一对应的,大概率是Employees表遗漏了job_id字段(用于关联Jobs表的job_id)。这种情况下,使用多表左连接即可实现需求:
SELECT e.emp_id AS empno, e.lastname, d.deptname, j.jobdesc, s.salary_amount AS salary FROM Employees e LEFT JOIN Departments d ON e.dept_id = d.dept_id LEFT JOIN Salaries s ON e.emp_id = s.emp_id LEFT JOIN Jobs j ON e.job_id = j.job_id; -- 假设Employees表存在job_id字段
- 使用
LEFT JOIN可以保留所有员工数据,即使某些员工没有对应部门、薪资或职位记录(对应字段会显示为NULL);如果只需要有完整关联数据的员工,可替换为INNER JOIN。
场景2:严格遵循给定表结构(无关联字段)
如果Jobs表确实没有任何与其他表关联的字段,唯一能将jobdesc纳入结果的方式是使用交叉连接(CROSS JOIN),但这会让每个员工匹配所有职位描述,产生大量冗余数据,基本不符合实际业务需求:
SELECT e.emp_id AS empno, e.lastname, d.deptname, j.jobdesc, s.salary_amount AS salary FROM Employees e LEFT JOIN Departments d ON e.dept_id = d.dept_id LEFT JOIN Salaries s ON e.emp_id = s.emp_id CROSS JOIN Jobs j;
注意:交叉连接会生成
员工数 × 职位数条记录,除非业务有特殊需求,否则不推荐使用。
内容的提问来源于stack exchange,提问作者Charan tej Kanuguri
相关产品推荐
相关产品推荐

