比较 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
我有两个 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