首页 > 解决方案 > 使用 Null 进行左连接的 SQL 案例

问题描述

我正在尝试通过将新数据与原始数据左连接并比较输出来创建比较查询。我的查询很简单,但似乎无法让它做我想做的事。我知道我不能像其他值一样比较 NULL 值,但我希望通过执行 ISNULL 会给我我需要的结果:

SELECT  O.Ded1,         
        ISNULL(N.Ded2, 0) AS Ded2,      
        CASE
          WHEN O.Ded1 =  N.Ded2 THEN 'Correct' 
          ELSE 'Incorrect'
        END AS 'DED CHECK'

FROM #Tmp_ORIG_DATA O

LEFT JOIN #Tmp_NEW_DATA N ON O.ID = N.ID

我想知道是否需要将这些值插入临时表以使其成为物理值?

提前致谢

抱歉,我应该添加此查询的结果:

> Ded1 Ded2 DED CHECK 0 0 错误 0 0 错误 0 0 错误 > 0 0 错误 0 0 错误 0 0 错误 0 0 错误 0 0 错误

真的,我希望支票说正确。

谢谢

标签: sqlsql-serverleft-joincasesql-null

解决方案


您明确检查无效性。需要额外的检查来区分不匹配的行和匹配的行 where Ded2is null

SELECT  
    O.Ded1,         
    N.Ded2,      
    CASE
        WHEN O.Ded1 =  N.Ded2
            OR (N.ID IS NOT NULL AND o.Ded1 IS NULL AND N.Ded2 IS NULL) 
        THEN 'Correct' 
        ELSE 'Incorrect'
    END AS 'DED CHECK'
FROM #Tmp_ORIG_DATA O
LEFT JOIN #Tmp_NEW_DATA N ON O.ID = N.ID

推荐阅读