显示顶表中不匹配的记录

问题描述

表一

Col1 Col2 日期
A B 02/25/2020
A B 02/25/2020
A B 03/20/2020
A C 02/21/2020
select * 
from Table1 
where Date between 2020-02-20 and 2020-02-27

表 2

Col1 Col2 日期
A B 03/20/2020
D E 03/20/2020

需要比较表 1 和表 2,如果 col1 和 col 2 值相同,则不应从表 1 中显示记录

所以输出应该来自Table1

Col1 Col2 日期
A C 03/20/2020

解决方法

根据 Col1 和 Col2 从 Table1 中选择 Table2 中不存在的行。

SELECT * FROM Table1 T1
WHERE NOT EXISTS (
   SELECT 1 FROM Table2 T2 
   WHERE T1.col1 = T2.col1
     AND T1.col2 = T2.col2
)
AND T1.Date between '2020-02-20' and '2020-02-27'
,

使用外连接:

select a.* 
from Table1 a
left join Table2 b on a.col1 = b.col1
  and a.col2 = b.col2
where Date between '2020-02-20' and '2020-02-27'
and b.col1 is null

where 子句过滤没有连接的行。