【问题标题】:Display the unmatched record from top table显示顶部表格中不匹配的记录
【发布时间】:2021-06-12 12:02:03
【问题描述】:

表 1

Col1 Col2 Date
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 Date
A B 03/20/2020
D E 03/20/2020

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

所以输出应该来自 Table1

Col1 Col2 Date
A C 03/20/2020

【问题讨论】:

标签: sql sql-server sql-server-2012


【解决方案1】:

根据 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'

【讨论】:

  • 嗨@StephenOstermiller 我认为代码是不言自明的,但我只是添加了代码的作用。
【解决方案2】:

使用外连接:

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 子句过滤了没有有连接的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多