选择两个表版本之间不同的列

时间:2017-08-18 06:17:33

标签: mysql sql

假设我有以下表结构:

Table1

        FixedColumn1 FixedColumn2 ChangingColumn1 ChangingColumn2
        Test1        Test11       1               3
        Test2        Test22       2               5

相同Table1已更新并保存在另一个具有相同结构的表中

SameTable1Updated

        FixedColumn1 FixedColumn2 ChangingColumn1 ChangingColumn2
        Test1        Test11       77               23
        Test2        Test22       22               5
        Test3        Test33       5                null

现在,我有下表,我想保存修改过的数据:

DifferencesTable

FixedColumn1 FixedColumn2 Change         ColumnName       NewValue OldValue
Test1        Test11       Modified        ChangingColumn1  77       1
Test1        Test11       Modified        ChangingColumn2  23       3
Test2        Test22       Modified        ChangingColumn1  22       2
Test3        Test33       Added           ChangingColumn1   5       null

FixedColumn1FixedColumn2的组合为unique(like a primary key).

我知道如何在使用DataTables的代码中执行此操作,但可以在sql中使用吗?

编辑:

因此,基本上Table1将在某个时刻更新并保存在SameTable1Updated中(某些行将更改,某些行将被完全删除或某些行将被添加)。如果行值已从Table1更改并仍显示在SameTable1Updated中,则会将参数Change添加为Modified,并将OldValue添加到表and with the new value from SameTable1Updated {{1将. If the row will be completely removed from Table1, it will appear with the parameter已删除as OldValue and with Table1 parameter as the values from NewValue`参数更改为所有记录的null。 而另一种方法是在Table2中新添加的行。

我已经以最好的方式解释了这种情况。如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

加入表以查找ChangingColumn1更改。对ChangingColumn2更改执行相同操作。 UNION ALL结果:

select t1.FixedColumn1, t1.FixedColumn2,
       stu.ChangingColumn1 as NewValue, t1.ChangingColumn1 as OldValue
from Table1 t1
join SameTable1Updated stu
    on  t1.FixedColumn1 = stu.FixedColumn1
    and t1.FixedColumn2 = stu.FixedColumn2
    and t1.ChangingColumn1 <> stu.ChangingColumn1
UNION ALL
select t1.FixedColumn1, t1.FixedColumn2,
       stu.ChangingColumn2 as NewValue, t1.ChangingColumn2 as OldValue
from Table1 t1
join SameTable1Updated stu
    on  t1.FixedColumn1 = stu.FixedColumn1
    and t1.FixedColumn2 = stu.FixedColumn2
    and t1.ChangingColumn2 <> stu.ChangingColumn2
order by t1.FixedColumn1, t1.FixedColumn2