假设我具有以下表格结构:
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
FixedColumn1
和FixedColumn2
的组合为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/