You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL嵌套子查询问题:查询ID为105的员工工作地点完整信息

问题解决:获取ID为105的员工工作地点完整数据

需求说明

使用HR.LOCATIONS、HR.DEPARTMENTS和HR.EMPLOYEES三张表,展示员工ID为105的员工工作地点的完整数据。

错误SQL语句

原执行失败的SQL:

select street_address from hr.locations
where street_address in (select location_id from hr.departments
                            where(select department_id from hr.employees 
                                where employee_id = "105"))

错误原因

  1. 字段匹配逻辑错误:用street_address(地址字符串)和子查询返回的location_id(数字类型地点ID)做匹配,两者类型、含义完全不对应,导致关联失效。
  2. 子查询语法缺失:中间WHERE后直接嵌套子查询,未指定关联条件,正确写法应为department_id = (子查询)。
  3. 数据类型不匹配:employee_id是数字类型,不应使用双引号包裹"105",直接写数字或用单引号即可。

正确SQL写法

方法一:JOIN关联表(推荐,逻辑清晰性能更优)

SELECT l.*
FROM hr.locations l
JOIN hr.departments d ON l.location_id = d.location_id
JOIN hr.employees e ON d.department_id = e.department_id
WHERE e.employee_id = 105;

通过表间外键关联(员工表department_id关联部门表department_id,部门表location_id关联地点表location_id),直接定位目标员工对应的完整地点数据。

方法二:修正嵌套子查询

SELECT l.*
FROM hr.locations l
WHERE l.location_id = (
    SELECT d.location_id
    FROM hr.departments d
    WHERE d.department_id = (
        SELECT e.department_id
        FROM hr.employees e
        WHERE e.employee_id = 105
    )
);

修正字段匹配逻辑,用location_id关联部门表与地点表,同时通过等值匹配确保子查询返回正确的关联字段。

表结构参考

hr.employees表

EMPLOYEE_IDFIRST_NAMELAST_NAMEEMAILPHONE_NUMBERHIRE_DATEJOB_IDSALARYCOMMISSION_PCTMANAGER_IDDEPARTMENT_ID
100StevenKingSKING515.123.456717-JUN-03AD_PRES24000--90

hr.departments表

DEPARTMENT_IDDEPARTMENT_NAMEMANAGER_IDLOCATION_ID
10Administration2001700

hr.locations表

LOCATION_IDSTREET_ADDRESSPOSTAL_CODECITYSTATE_PROVINCECOUNTRY_ID
10001297 Via Cola di Rie00989Roma-IT

内容的提问来源于stack exchange,提问作者Rume Diablo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:05:17