我有两张桌子。
Table1 :-
Col1
AAA
BBB
CCC
Table2 :-
Col1
AAA
BBB
ZZZ

我想获得输出: - 2
在上面两个表中包含2个匹配行和两个非加工行。如何编写Sql查询来获取非匹配行的计数。
答案 0 :(得分:1)
要获得数量的不匹配行,一种简单的方法如下所示。我们得到Table1
中不存在Table2
中的行数,我们得到的Table2
中的行数不在Table1
中,我们添加两者。 UNION ALL
结合了两个查询的结果(我们使用此而不是UNION
,因为UNION
会丢弃重复项。
SELECT SUM(NonMatchingRows) AS TotalNonMatchingRows
FROM (
-- Rows from Table1 that don't have a match in Table2
SELECT COUNT(*) AS NonMatchingRows
FROM Table1
WHERE Col1 NOT IN ( SELECT DISTINCT Col1 FROM Table2 )
UNION ALL
-- Rows from Table2 that don't have a match in Table1
SELECT COUNT(*) AS NonMatchingRows
FROM Table2
WHERE Col1 NOT IN ( SELECT DISTINCT Col1 FROM Table1 )
) AS X
要获取匹配行的数量,您需要运行:
SELECT COUNT(*) AS MatchingRows
FROM Table1
INNER JOIN Table2
ON Table1.Col1 = Table2.Col1
此内部联接仅返回两个表中Col1
具有相同值的行。请注意,如果Table 1
中的一行与Table 2
中的两行匹配,则此查询将返回2.