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

Oracle连接查询求助:如何获取员工全部门关联的FLAG为N的记录

问题:获取员工与所有部门关联的FLAG状态

现有表结构及数据

Department表

DEPTFLAG
D1Y
D2Y
D3Y
D4Y

Employee表

EMPDEPTFLAG
EMP1D1Y
EMP1D2Y
EMP2D1Y
EMP2D2Y
EMP2D3Y
EMP3D3Y
EMP4D2Y
EMP4D3Y

期望输出结果

EMPDEPTFLAG
EMP1D1Y
EMP1D2Y
EMP1D3N
EMP1D4N
EMP2D1Y
EMP2D2Y
EMP2D3Y
EMP2D4N
EMP3D1N
EMP3D2N
EMP3D3Y
EMP3D4N
EMP4D1N
EMP4D2Y
EMP4D3Y
EMP4D4N

当前问题

查询所有员工时,仅能返回FLAG为Y的记录,无法获取员工未关联部门对应的FLAG=N记录;但指定单个员工使用外连接时可以得到N记录。

解决方案

使用以下SQL语句即可生成期望结果:

WITH UniqueEmployees AS (
    SELECT DISTINCT EMP FROM Employee
)
SELECT 
    u.EMP,
    d.DEPT,
    CASE WHEN e.EMP IS NOT NULL THEN 'Y' ELSE 'N' END AS FLAG
FROM UniqueEmployees u
CROSS JOIN Department d
LEFT JOIN Employee e 
    ON u.EMP = e.EMP AND d.DEPT = e.DEPT
ORDER BY u.EMP, d.DEPT;

思路说明

  1. 先用WITH子查询提取所有不重复的员工,避免重复处理同一员工的多条记录;
  2. 通过CROSS JOIN生成所有员工与所有部门的组合,这是补全N记录的核心;
  3. 左连接原Employee表,匹配员工和部门的关联关系;
  4. 用CASE语句判断是否匹配到记录,匹配到则标记为Y,否则为N;
  5. 最后按员工和部门排序,保证结果有序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 08:41:01