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

编写T-SQL语句查询每个EmpId未出现在T2中的T1对应日期

T-SQL多表差集查询问题解决方案

基础信息

涉及表结构及样例数据

  • T1:存储全量日期列表
DateList
2021-11-06
2021-11-07
2021-11-08
2021-11-09
  • T2:存储员工ID与对应的申请日期
EmpId   ApplyDate
1   2021-11-07
1   2021-11-09
2   2021-11-09

查询需求

获取每个员工ID对应的、未提交申请的T1日期,输出结果包含DateList、EmpId两列,预期输出如下:

DateList    EmpId
2021-11-06  1
2021-11-08  1
2021-11-06  2
2021-11-07  2
2021-11-08  2

可用T-SQL实现语句

SELECT 
    t1.DateList,
    e.EmpId
FROM T1 t1
-- 生成所有员工与所有日期的全量组合
CROSS JOIN (SELECT DISTINCT EmpId FROM T2) e
-- 过滤掉已有申请记录的组合
WHERE NOT EXISTS (
    SELECT 1 
    FROM T2 t2 
    WHERE t2.EmpId = e.EmpId 
    AND t2.ApplyDate = t1.DateList
)
-- 可选:按员工ID、日期排序匹配预期输出顺序
ORDER BY e.EmpId, t1.DateList

实现逻辑说明

  • 先通过CROSS JOIN得到全量的「员工-日期」配对,确保每个员工都和T1的所有日期完成关联
  • 再通过NOT EXISTS子句剔除该员工已经在T2中存在申请记录的日期,剩下的就是符合要求的结果
  • 语句兼容所有SQL Server版本,执行效率较高,不需要额外的复杂关联操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:24:07