查询使用Sql Server获取两个表的非匹配行数?

时间:2017-03-20 07:59:16

标签: sql-server

我有两张桌子。



Table1 :-

Col1

AAA

BBB

CCC

Table2 :-

Col1

AAA

BBB

ZZZ




我想获得输出: - 2 在上面两个表中包含2个匹配行和两个非加工行。如何编写Sql查询来获取非匹配行的计数。

1 个答案:

答案 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.