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

如何基于键列返回无匹配空值?查询无离职记录的已终止员工

问题需求

我们需要编写SQL查询,找出employee表中已终止雇佣(Term_Flag为Yes)但在Emp_History表中无离职(Term)记录的员工。

表结构说明

Employee表

Emp_IDEmp_NameTerm_Flag
1SallyNo
2LucyYes
3MarcieYes

Emp_History表

Emp_IDEmp_DateReason_Code
11/1/2024Hire
21/1/2023Hire
212/31/2024Term
31/1/2025Hire

预期结果:返回Marcie,她的Term_Flag为Yes,但Emp_History中没有对应的Term记录。

解决方案

以下是几种可行的实现方式:

方法1:LEFT JOIN + IS NULL

通过左连接关联员工表和离职记录,筛选出未匹配到Term记录的员工:

SELECT e.Emp_ID, e.Emp_Name
FROM Employee e
LEFT JOIN Emp_History eh 
  ON e.Emp_ID = eh.Emp_ID 
  AND eh.Reason_Code = 'Term'
WHERE e.Term_Flag = 'Yes'
  AND eh.Emp_ID IS NULL;

方法2:NOT EXISTS

通过子查询判断员工是否存在Term记录,不存在则返回:

SELECT Emp_ID, Emp_Name
FROM Employee
WHERE Term_Flag = 'Yes'
  AND NOT EXISTS (
    SELECT 1 
    FROM Emp_History 
    WHERE Emp_ID = Employee.Emp_ID 
      AND Reason_Code = 'Term'
  );

方法3:NOT IN

注意:如果Emp_History中Emp_ID存在NULL值,NOT IN可能导致结果异常,需谨慎使用:

SELECT Emp_ID, Emp_Name
FROM Employee
WHERE Term_Flag = 'Yes'
  AND Emp_ID NOT IN (
    SELECT Emp_ID 
    FROM Emp_History 
    WHERE Reason_Code = 'Term'
  );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:16:12