0

我有 2 张桌子。我想从两个表中获取记录,同时FULL OUTER JOIN从其中一个表中过滤掉一些数据。

  1. 14026 - 公共记录的总数。
  2. 8428 - 表 1 中的唯一记录
  3. 1512 - 表 2 中的唯一记录。

我应该得到的总记录是 23966。但是,以下查询返回不同的结果。

查询 1 -

SELECT DISTINCT pu.id,
       vm.id
FROM table1 vm
FULL OUTER JOIN (SELECT DISTINCT pu.id 
                 FROM table2 pu 
                 WHERE pu.column1 = 'filter1'
                 AND pu.column2 = 'filter2') pu ON vm.id = pu.id; 

输出 - 23966 行(预期)。

查询 2 -

SELECT DISTINCT pu.id,
       vm.id
FROM table1 vm
FULL OUTER JOIN table2 pu ON vm.id = pu.id AND pu.column1 = 'filter1' AND pu.column2 = 'filter2';

输出 - 48804 行。

问题 3 -

SELECT DISTINCT pu.id,
       vm.id
FROM table1 vm
FULL OUTER JOIN table2 pu ON vm.id = pu.id 
WHERE (pu.column1 = 'filter1' AND pu.column2 = 'filter2')
OR (pu.column1 IS NULL AND pu.column2 IS NULL);

输出 - 21830。

根据我的理解,至少第三个查询也应该给我与查询 1 相同的结果。有人可以解释一下 SQL Server 如何处理这三个查询吗?

4

0 回答 0