如何在SQL中找到两个数据集的差异?
我想将表与早期备份进行比较,并找出所有差异 虽然使用减号运算符很容易找到所有更改的数据集,但如果有多个属性发生更改,则很难同时选择更改属性的名称或任何更改属性的名称 到目前为止,我通过手动比较数据集发现了差异,但我仍然对一种解决方案感兴趣,该解决方案可以打印出已编辑的数据集以及已更改的属性,而无需将列名硬编码到查询中 例如: 备份表MyTable\u备份:如何在SQL中找到两个数据集的差异?,sql,oracle,Sql,Oracle,我想将表与早期备份进行比较,并找出所有差异 虽然使用减号运算符很容易找到所有更改的数据集,但如果有多个属性发生更改,则很难同时选择更改属性的名称或任何更改属性的名称 到目前为止,我通过手动比较数据集发现了差异,但我仍然对一种解决方案感兴趣,该解决方案可以打印出已编辑的数据集以及已更改的属性,而无需将列名硬编码到查询中 例如: 备份表MyTable\u备份: ID | Name | Value ----------------- 1 | Alie | 15 2 | Bob | 7 3 |
ID | Name | Value
-----------------
1 | Alie | 15
2 | Bob | 7
3 | Eve | 0
当前表MyTable:
ID | Name | Value
-----------------
1 | Alice| 15
2 | Bob | 8
3 | Eve | 0
预期产出:
ID | Name | Value | DiffAttribute
---------------------------------
1 | Alice| 15 | Name
2 | Bob | 8 | Value
尝试:
尝试:
您能告诉我们您正在使用的查询吗?很抱歉错误更正。我以为这是个打字错误。为什么值相同时alice会出现在结果中?@Jeremy:我使用的查询只是从MyTable中选择*减去从MyTable中选择*的值。\u Backupjarlh:别担心,我回滚了它@artm:我想要MyTable而不是MyTable_备份中的完整数据集加上已更改属性的名称-在本例中是名称。您能告诉我们您正在使用的查询吗?抱歉,错误更正。我以为这是个打字错误。为什么值相同时alice会出现在结果中?@Jeremy:我使用的查询只是从MyTable中选择*减去从MyTable中选择*的值。\u Backupjarlh:别担心,我回滚了它@artm:我想要MyTable中的完整数据集,而不是MyTable_Backup中的完整数据集加上已更改属性的名称-在本例中是名称。抱歉,这只是通过将列名称硬编码到查询中来比较表。正如我在问题中所说的,我只对一种可以避免这种情况的解决方案感兴趣。对不起,这只是通过将列名硬编码到查询中来比较表。正如我在问题中所说,我只对一个可以避免这种情况的解决方案感兴趣。
Select a.ID, a.Name, A.Value
, case when a.Name <> B.Name and
a.Value <> B.Value
then 'Name,Value'
when a.Name <> B.Name then 'Name'
when a.Value <> B.Value then 'Value'
when b.value is null then 'Missing'
end DiffAttribute
from MyTable a
left join MyTable_Backup b
on a.id = b.id