【问题标题】:SQL Merging Tables Based On Multiple Matching Column Values基于多个匹配列值的SQL合并表
【发布时间】:2013-09-12 02:31:35
【问题描述】:

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

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

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

【问题讨论】:

  • 请提供示例数据和表架构信息,以便我们为您提供帮助。

标签: mysql sql


【解决方案1】:

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

一样附加

--查看更新
创建视图 ChangeTable1 作为 选择 table2.map、table2.authid、table2.name、table2.date、table1.map 作为 t1map、table1.authid 作为 t1authid...从 table1 到 table1.map=table2.map 和 table1.athid= 上的内部连接 ​​table2 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) from table1)

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

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

插入表 1 (map, authid, name, time, date, .... as select map, authid, name, time, date, ... from Add2Table1

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

【讨论】:

    猜你喜欢
    • 2019-09-17
    • 1970-01-01
    • 2019-07-13
    • 2020-11-30
    • 2014-08-21
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多