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

在不同筛选条件下查找另一张表中缺失的日期

匹配Ref#查找跨表不存在的日期解决方案

1. 查找Table1(Yellow)中存在、Table2(同Ref#的Pink)中不存在的日期

用NOT EXISTS精准匹配Ref#和Date,同时限定筛选条件:

SELECT t1.Ref#, t1.Date
FROM Table1 t1
WHERE t1.criteria = 'Yellow'
  AND NOT EXISTS (
    SELECT 1
    FROM Table2 t2
    WHERE t2.Ref# = t1.Ref#
      AND t2.Criteria = 'Pink'
      AND t2.Date = t1.Date
  );

你的示例数据里,此查询返回空结果——因为Table1的所有Yellow日期在Table2的Pink数据中都存在。

2. 查找Table2(Pink)中存在、Table1(同Ref#的Yellow)中不存在的日期

同样使用NOT EXISTS:

SELECT t2.Ref#, t2.Date
FROM Table2 t2
WHERE t2.Criteria = 'Pink'
  AND NOT EXISTS (
    SELECT 1
    FROM Table1 t1
    WHERE t1.Ref# = t2.Ref#
      AND t1.criteria = 'Yellow'
      AND t1.Date = t2.Date
  );

针对你的示例数据,这个查询会返回:

Ref#     Date
abc123   05/02/1990

3. 左连接替代写法

如果更习惯左连接逻辑,可以用以下语句实现场景2的需求:

SELECT t2.Ref#, t2.Date
FROM Table2 t2
LEFT JOIN Table1 t1
  ON t1.Ref# = t2.Ref#
  AND t1.criteria = 'Yellow'
  AND t1.Date = t2.Date
WHERE t2.Criteria = 'Pink'
  AND t1.Ref# IS NULL;

原理是将Table2的Pink数据与Table1的Yellow数据按Ref#和Date关联,关联失败(t1.Ref# IS NULL)的记录就是Table1中不存在的日期,结果与NOT EXISTS写法一致。

4. 同时获取两边的缺失日期

如果需要一次性得到两张表互相缺失的日期,可以用UNION ALL合并两个查询:

-- Table1有但Table2没有的日期
SELECT t1.Ref#, t1.Date, 'Missing in Pink' AS status
FROM Table1 t1
WHERE t1.criteria = 'Yellow'
  AND NOT EXISTS (
    SELECT 1
    FROM Table2 t2
    WHERE t2.Ref# = t1.Ref#
      AND t2.Criteria = 'Pink'
      AND t2.Date = t1.Date
  )
UNION ALL
-- Table2有但Table1没有的日期
SELECT t2.Ref#, t2.Date, 'Missing in Yellow' AS status
FROM Table2 t2
WHERE t2.Criteria = 'Pink'
  AND NOT EXISTS (
    SELECT 1
    FROM Table1 t1
    WHERE t1.Ref# = t2.Ref#
      AND t1.criteria = 'Yellow'
      AND t1.Date = t2.Date
  );

关键注意事项

  • 确保Date字段的类型/格式完全一致,避免因隐式转换导致匹配失败
  • 若存在多个Ref#,上述查询会自动按每个Ref#分别匹配,无需额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:25:13