基于多个匹配列值的SQL合并表

时间:2013-09-12 02:31:35

标签: mysql sql

尝试合并具有此结构的两个游戏服务器表:

地图| authid |名字|时间|日期| ...

我想仅在table2的time值小于table1的值时替换行,并且仅在mapauthid值相同的情况下才替换。如果table2中的time值更大,则应保持当前表(table1)中的行不受影响。否则(在不同的mapauthid值上),table2中的行应该只是附加到table1。

1 个答案:

答案 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
如果您需要执行此操作的永久进程,可以考虑将其放入存储过程