问题描述
表一
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
子句过滤没有连接的行。