Oracle Live SQL查询HUNOLD同部门员工的正确JOIN写法求助
错误原因
你编写的SQL自连接逻辑存在问题:没有通过department_id关联两个员工实例,现有的连接条件e.last_name = 'HUNOLD'相当于把HUNOLD的单条记录和全表所有员工做笛卡尔积拼接,返回结果不符合需求。
正确实现
方案1:自连接实现(和你的原有思路匹配)
SELECT e.last_name, e.hire_date FROM employees e JOIN employees h ON e.department_id = h.department_id WHERE h.last_name = 'HUNOLD';
逻辑:用别名h指代姓氏为HUNOLD的员工记录,通过部门ID关联所有和他同部门的员工e,直接查询e的对应字段即可。
方案2:子查询实现(逻辑更直观)
SELECT last_name, hire_date FROM employees WHERE department_id = ( SELECT department_id FROM employees WHERE last_name = 'HUNOLD' );
逻辑:先通过子查询拿到HUNOLD所在的部门ID,再查询该部门下所有员工的对应字段即可。如果存在多名姓氏为HUNOLD的员工,把语句中的=替换为IN即可兼容。
扩展(如需返回部门名称)
如果需要同时展示所属部门名称,可以关联提供的departments表:
SELECT e.last_name, e.hire_date, d.department_name FROM employees e JOIN employees h ON e.department_id = h.department_id JOIN departments d ON e.department_id = d.department_id WHERE h.last_name = 'HUNOLD';
内容的提问来源于stack exchange,提问作者Amida
相关产品推荐
相关产品推荐

