SQL Server:FULL OUTER JOIN异常行为

时间:2014-08-26 14:04:14

标签: sql sql-server database join full-outer-join

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

  1. 14026 - 常用记录总数。
  2. 8428 - 表1中的独特记录
  3. 1512 - 表2中的独特记录。
  4. 我应该获得的总记录是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如何处理这3个查询吗?

0 个答案:

没有答案