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

时间:2015-06-03 11:52:30

标签: sql oracle

我想将表与早期备份进行比较,并确定所有差异。

虽然很容易找到所有已更改的数据集(使用MINUS运算符),但很难同时选择已更改属性的名称(或者如果有多个属性则为任何已更改的属性启动)改变)。

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

示例:

备份表(MyTable_Backup):

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

1 个答案:

答案 0 :(得分:-1)

尝试:

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