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

如何使用LEFT JOIN仅展示emp_target表的列

问题:如何使用LEFT JOIN仅展示emp_target表的列?

现有表结构

  • Emp表:
    EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
    
  • emp_target表:
    TOTAL_NO_OF_EMPLOYEES  TOTAL_SAL HIGHEST_SAL LOWEST_SAL AVERGAE_SAL     DEPTNO
    

期望输出

仅展示emp_target表的列:

TOTAL_NO_OF_EMPLOYEES  TOTAL_SAL HIGHEST_SAL LOWEST_SAL AVERGAE_SAL     DEPTNO

你尝试的SQL语句

select count(empno) as Total_no_of_employees,sum(sal) as Total_sal,max(sal) as Highest_sal,
round(avg(sal)) as avergae_sal,min(sal) as lowest_sal
from emp
Left outer join emp_target  on emp.deptno = emp_target.deptno
where emp.deptno not in (select deptno from emp_target);

问题分析与修正

你的SQL存在两个核心问题:

  1. 当前查询是从emp表聚合数据,而非直接选取emp_target的列,和需求不符。
  2. LEFT JOIN后添加where emp.deptno not in (...)会将左连接转为内连接效果,过滤掉emp_target中匹配的行,不符合展示emp_target列的需求。

场景1:仅关联后返回emp_target的所有列

如果需求是通过LEFT JOIN关联Emp表后,只返回emp_target表的列,直接在SELECT子句指定emp_target.*即可:

SELECT emp_target.*
FROM emp
LEFT JOIN emp_target ON emp.deptno = emp_target.deptno

场景2:统计Emp表中未在emp_target里的部门数据(匹配emp_target列格式)

从你的尝试SQL推测,你可能需要找出Emp表中存在但emp_target表中没有的部门,计算这些部门的统计数据并以emp_target的列格式输出,此时可以调整为:

SELECT 
  COUNT(emp.empno) AS TOTAL_NO_OF_EMPLOYEES,
  SUM(emp.sal) AS TOTAL_SAL,
  MAX(emp.sal) AS HIGHEST_SAL,
  MIN(emp.sal) AS LOWEST_SAL,
  ROUND(AVG(emp.sal)) AS AVERGAE_SAL,
  emp.DEPTNO
FROM emp
LEFT JOIN emp_target ON emp.deptno = emp_target.deptno
WHERE emp_target.deptno IS NULL
GROUP BY emp.DEPTNO
  • 使用emp_target.deptno IS NULL筛选Emp表中无匹配的部门,比NOT IN更可靠(避免NULL值导致的异常)。
  • 通过GROUP BY emp.DEPTNO按部门分组计算统计值,输出列名与emp_target表一致,符合期望格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:55:27