假设我具有以下表格结构:

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并与Table OldValue SameTable1Updated and with the new value from Change . If the row will be completely removed from Table1, it will appear with the parameter Removed as中的and with添加在一起所有记录的OldValue parameter as the values from Table1 and NewValue`参数均为null。
另一种方法是用于Table2中新添加的行。

我已经尽我所能解释了这种情况。如果您需要更多信息,请告诉我。

最佳答案

连接表以查找ChangeingColumn1的更改。对ChangeingColumn2更改执行相同的操作。 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

关于mysql - 选择两个表版本之间不同的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45749720/

10-15 10:50