0

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

地图 | 身份验证 | 姓名 | 时间 | 日期 | ...

time仅当table2 的值小于 table1 的值并且仅当mapauthid值都相同时,我才想替换一行。如果timetable2 中的值更大,则当前表 (table1) 中的行应保持不变。否则(在不同的mapauthid值上),table2 中的行应该简单地附加到 table1。

4

1 回答 1

0

我的方法是第一种:创建一个视图来替换行和另一个具有正确结果集的视图,应该像这样

--view for update
create view ChangeTable1 as select table2.map, table2.authid,table2.name, table2.date, table1.map as t1map, table1.authid as t1authid...从table1到table1.map上的内部连接table2 =table2.map 和 table1.athid=table2.autid 其中 table1.time>table2.time

-- 附加
视图 创建视图 Add2Table1 select table2.map, table2.authid,table2.name, table2.date... from table2 where concat(table2.map, table2.authid) not in (select concat(table1.map, table1.authid) 来自 table1)

-- 基于第一个视图的更新语句ChangeTable1
update ChangeTable1 set t1date=date, t1somevalue=somevalue......

-- 插入基于第二个视图的语句 Add2Table1

插入表 1(地图,身份验证,名称,时间,日期,...作为选择地图,身份验证,名称,时间,日期,...从 Add2Table1

我希望这会有所帮助。我主要做 MS SQL,所以可能是一些语法问题需要翻译成 MYSQL,Nils
如果你需要一个永久的过程来做这个,你可以考虑把它放在一个存储过程中

于 2013-09-12T11:18:41.953 回答