从外部联接中删除内部联接结果

问题描述 投票:0回答:1

我需要一些帮助来理解为什么我没有看到 SELECT 语句中 WHERE 子句形成 RIGHT Join 所期望的结果。 我正在尝试从 RIGHT JOIN 中过滤出 INNER JOIN 结果,我通过以下语句来做到这一点:

SELECT * 
FROM ([dbo].[TransactionPBS] RIGHT JOIN [dbo].[LoadFIS]
     ON [dbo].[TransactionPBS].[Scenario] = [dbo].[LoadFIS].[Scenario] AND
        [dbo].[TransactionPBS].[SubScenario] = [dbo].[LoadFIS].[SubScenario] AND 
        [dbo].[TransactionPBS].[Version] = [dbo].[LoadFIS].[Version] AND 
        [dbo].[TransactionPBS].[DivisionCode] = [dbo].[LoadFIS].[DivisionCode] AND 
        [dbo].[TransactionPBS].[UnitCode] = [dbo].[LoadFIS].[UnitCode] AND 
        [dbo].[TransactionPBS].[AccountCode] = [dbo].[LoadFIS].[AccountCode] AND 
        [dbo].[TransactionPBS].[FundCode] = [dbo].[LoadFIS].[FundCode] AND
        [dbo].[TransactionPBS].[FunctionCode] = [dbo].[LoadFIS].[FunctionCode] AND
        [dbo].[TransactionPBS].[TransDate] = [dbo].[LoadFIS].[TransDate]
     )
WHERE [dbo].[LoadFIS].[LoadStatus] = 'Success' AND
      [dbo].[TransactionPBS].[TranPBSID] = NULL;`

如果删除 WHERE 子句,我将得到下图中的结果。如您所见,有些行 [dbo].[LoadFIS].[LoadStatus] 等于“Success”AND [dbo].[TransactionPBS].[TranPBSID]:

without WHERE clause

但是,如果我添加 WHERE 子句,这就是我得到的:

with WHERE clause

我不明白为什么我没有看到与 WHERE 子句匹配的行。

为了解决这个问题,我在 HOING 语句两边加上了括号,但没有成功。

outer-join
1个回答
0
投票

没关系。我简直不敢相信我这么傻。我必须使用 IS 运算符来检查 NULL。

© www.soinside.com 2019 - 2024. All rights reserved.