Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中找到两个数据集的差异?_Sql_Oracle - Fatal编程技术网

如何在SQL中找到两个数据集的差异?

如何在SQL中找到两个数据集的差异?,sql,oracle,Sql,Oracle,我想将表与早期备份进行比较,并找出所有差异 虽然使用减号运算符很容易找到所有更改的数据集,但如果有多个属性发生更改,则很难同时选择更改属性的名称或任何更改属性的名称 到目前为止,我通过手动比较数据集发现了差异,但我仍然对一种解决方案感兴趣,该解决方案可以打印出已编辑的数据集以及已更改的属性,而无需将列名硬编码到查询中 例如: 备份表MyTable\u备份: ID | Name | Value ----------------- 1 | Alie | 15 2 | Bob | 7 3 |

我想将表与早期备份进行比较,并找出所有差异

虽然使用减号运算符很容易找到所有更改的数据集,但如果有多个属性发生更改,则很难同时选择更改属性的名称或任何更改属性的名称

到目前为止,我通过手动比较数据集发现了差异,但我仍然对一种解决方案感兴趣,该解决方案可以打印出已编辑的数据集以及已更改的属性,而无需将列名硬编码到查询中

例如:

备份表MyTable\u备份:

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