Sql查询以获取匹配和不匹配记录的计数

问题描述

请让我知道我们如何通过以下场景实现这一目标

我有一个带列的表格

表A

EmpId   Name  Contact
---------------------
100     AA    xxxxx
101     BB    yyyyy
102     rr    zzzzz
103     jj    1234
104     GG    6789

表 B

Id EmpId  Product
------------------
1  100     Sample1
2  100     Sample2
3  101     Sample1
4  103     Sample4

我需要从表 B 中获取表 A 中存在的列数(不同),但不存在于与 EmpId 列匹配的表 B 中

我尝试了以下方法

SELECT count(*) 
FROM Table A ta
WHERE ta.EmpId NOT IN (SELECT disTINCT(tb.EmpId) 
                       FROM Table B tb) 

我只计算哪些行不存在。

如何编写一个查询获取所有匹配和不匹配行的计数?

所需的输出

Matched NotMatched
------------------
3         2

解决方法

使用带聚合的左连接:

SELECT
    COUNT(DISTINCT b.EmpId) AS Matched,COUNT(CASE WHEN b.EmpId IS NULL THEN 1 END) AS NotMatched
FROM TableA a
LEFT JOIN TableB b
    ON b.EmpId = a.EmpId;