即使一方的两个表都为空,也不应该完全连接得到双方

时间:2015-08-31 19:53:20

标签: sql sql-server subquery

这不是完整查询(它是较大查询中的子查询)。但是,我知道这是导致我出现问题的部分,因为我已经把它自己带到了它的原因。我试图让两个表的两面都不具有匹配的复合键。特别是,GKey并不总是一样。

我目前正在使用完整的联接,但我仍然在双方都有差距。有一个例子说明数据应该如何产生。您可以看到两个不同表的两边都有空值。

   Input
| A    | B    |
| 2    | NULL |
| NULL |  5   |
| 3    |  3   |
|Null  |  6   |

  Outcome 
| A    | B    |
| 3    |  3   |




 SELECT DISTINCT BudgetUnit / (WorkDaysInMonth * 8) AS B
        ,Unit / (WorkDaysInMonth * 8) AS A

    FROM BFact AS BMF
    FULL JOIN GFact AS GF ON 
    BMF.GLKey = GF.GKey
        AND 

        BMF.DKey = GF.DKey
        AND GF.AKey = BMF.BKey
        AND GF.PKey = BMF.PKey
    INNER JOIN DimDate AS DA ON GF.AKey = DA.DateKey

1 个答案:

答案 0 :(得分:2)

因为您正在选择FROM BFact,然后在FULL JOIN之后在INNER JOIN中使用GFact,所以您将把FULL JOIN变为INNER JOIN,因为不会返回不满足最后一个INNER JOIN的结果。< / p>

您可以将最后一次INNER JOIN转换为LEFT OUTER JOIN以获得所需的结果。