我有一个临时表Temp_Table,根据它的两个字段,我需要在其他表中插入行,Table1和Table2
这些是实现这些目标的条件,
如果Temp_Table.Field1 = Table1.Field1和Temp_Table.Field2> Table1.Field2 然后,将行从Table1移到Table2,并将行从Temp_Table复制到Table1。
如果Temp_Table.Field1 = Table1.Field1和Temp_Table.Field2< Table1.Field2 然后,将行从Temp_Table复制到Table2。
如果Temp_Table.Field1在Table1中找不到任何匹配项,请将Temp_Table中的行复制到Table1。
由于Table1和Table2都有触发器,因此输出子句没有用。 Temp_Table本身可能具有Field1的重复值,因此需要对每一行进行检查。
我怎样才能通过mySql实现这一目标?
我将尝试显示一些示例数据。所有表都没有自动生成的ID。
表1:
Id Field1 Field2 Field3
0 1 30 Dec 2016 data1
表2:
Id Field1 Field2 Field3
Temp_Table:
Id Field1 Field2 Field3
1 1 29 Dec 2016 data2
2 2 31 Dec 2016 data3
3 2 01 Jan 2017 data4
结果表: 表1:
Id Field1 Field2 Field3
0 1 30 Dec 2016 data1
3 2 01 Jan 2017 data4
Tabl2:
Id Field1 Field2 Field3
1 1 29 Dec 2016 data2
2 2 31 Dec 2016 data3
答案 0 :(得分:0)
听起来有些操作需要一起执行,事务是使它们全部工作或全部失败的好方法。
我只提供了伪查询,因为使用的实际查询可能会随着您习惯的尝试而发展。
概念:
示例:
begin proc Abc as
begin
begin try
begin tran
--Step 1
Insert Table2 select Table1
Delete from Table1
insert into Table1 select TempTable
--Step 2
insert into Table2 select TempTable
--Step 3
insert into Table1 select TempTable left join Table1
commit tran
end try
begin catch
rollback tran
end catch
end