尝试合并具有此结构的两个游戏服务器表:
地图| authid |名字|时间|日期| ...
我想仅在table2的time
值小于table1的值时替换行,并且仅在map
和authid
值相同的情况下才替换。如果table2中的time
值更大,则应保持当前表(table1)中的行不受影响。否则(在不同的map
或authid
值上),table2中的行应该只是附加到table1。
答案 0 :(得分:0)
我的方式是 1st:创建一个用于替换行的视图,另一个用正确的结果集来替换行,如
- 查看更新
创建视图ChangeTable1
如
select table2.map,table2.authid,table2.name,table2.date,table1.map as t1map,table1.authid as t1authid ... from table1 to inner join table2 on table1.map = table2.map and table1.athid = table2.autid
table1.time> table2.time
- 追加的观点 创建视图Add2Table1 从table2中选择table2.map,table2.authid,table2.name,table2.date ...其中concat(table2.map,table2.authid)不在(从table1中选择concat(table1.map,table1.authid))< / p>
- 基于第一个视图ChangeTable1更新语句 更新ChangeTable1设置t1date = date,t1somevalue = somevalue ......
- 根据第二个视图添加语句Add2Table1
插入表1(地图,authid,名称,时间,日期,....作为选择地图,authid,名称,时间,日期......来自Add2Table1
我希望这有帮助。我主要做MS SQL,所以可能会有一些语法问题需要转换为MYSQL,Nils
如果您需要执行此操作的永久进程,可以考虑将其放入存储过程