比较 2 个表并列出不同的结果,但所有记录都受影响并且没有空值

Compare 2 Tables and listing results that are different but for all records affected and no nulls

我有两个 table,一个是主控 table,显示每个组合(唯一标识符)对于每个列值应具有的内容,另一个 table 列出每个组合及其当前的列值。我正在尝试比较两个 table 并显示与主 table 不匹配的每条记录以及它应该是什么。当数据确实匹配时,我目前得到 Nulls,但我希望填充来自主 table 的数据。问题是,当我确实从主 table 获取数据以填充空值时,它会显示所有记录,我只希望显示至少有一个不匹配的记录,而不是所有记录。示例代码为:

select a.combined, B.ID,B.code,

case
when A.CODE<>B.CODE
then A.CODE
End AS UPDATED_CODE,

B.QTY,
case
when A.QTY<>B.QTY
Then A.QTY
End AS UPDATED_QTY


FROM TABLE1 A
JOIN TABLE2 B ON A.COMBINED = B.COMBINED

where UPDATED_CODE is not null
or UPDATED_QTY is not null

这会显示所需的结果,但会在数据匹配时给出 Null。我希望它显示这些结果,但如果存在空值,也会提供 TABLE1 中的数据。上面查询的示例输出是:

    Combined        ID      B.CODE UPDATED_CODE B.QTY   A.QTY
1   1234565646464   1212121 RTD    JOR          15      ?
2   5632232356565   3333333 JOR    SBB          15      ?
3   3253265899656   2222222 SBB    SIH          15      ?
4   2332359654151   1111111 SBB    RTD          15      ?
5   2124184324324   0000000 JOR    RTD          15      ?
6   1654653235466   4444444 JOR    RTD          15      ?
7   4323656235659   7777777 RTD    ?            0       15

如果您不想 return 具有匹配数据的行,您应该将条件更改为 WHERE A.CODE<>B.CODE OR A.QTY<>B.QTY 并向每个 CASE 添加一个 ELSE B.col:

select a.combined, B.ID,B.code,

case
when A.CODE<>B.CODE
then A.CODE
else B.CODE
End AS UPDATED_CODE,

B.QTY,
case
when A.QTY<>B.QTY
Then A.QTY
else B.QTY
End AS UPDATED_QTY  

FROM TABLE1 A
JOIN TABLE2 B ON A.COMBINED = B.COMBINED

where A.CODE<>B.CODE
   or A.QTY<>B.QTY