MYSQL从新的外部源更新表

时间:2014-04-16 10:34:11

标签: mysql updates

我有一个表格费率,通过前缀的电话费用。说列是 id,provider,prefix,buyrate

每月,我从提供商处获得他们新费率的更新。一些前缀将是新的,一些将丢失(因此需要从速率中删除),一些将只是更新。假设更新具有相同的表结构newrate。

我有多个提供商,因此只有一部分费率表会发生变化,我会喜欢以保留现有的rate.id以便在可能的情况下进行更新。那么,我需要运行哪些查询才能执行以下操作:

1)更新提供商x的任何匹配前缀的价格,保持rate.id 2)删除提供商x删除的前缀的任何费率条目 3)为新前缀插入任何新价格

实施例 原始费率

id, provider, prefix, buyrate
1   1         0044    10
2   2         0044    11
3   2         0067    9
4   2         0072    13
5   3         0084    17  
Updates from provider 2
1   2         0067    8
1   2         0069    12
1   2         0072    16
New rate
1   1         0044    10
3   2         0067    8
4   2         0072    16
5   3         0084    17
6   2         0069    12

2 个答案:

答案 0 :(得分:0)

不确定您正在寻找的解决方案有多复杂。最简单的形式,如下所示:

更新:

update rates set buyrate=<new rate> where provider=x and prefix=y

删除:

delete from rates where provider=x and prefix=y

新价格:

insert into rates values (<id>, <provider>, <prefix>, <buyrate>

还有一些性能考虑因素,以及表的大小(原始文件和更新文件) - 您可以对现有数据的每个条目进行查询,以确定哪些条目是更新,哪些行丢失,哪些是新。您可以批量处理(例如,一次比较1000,并分成三个列表,一个用于更新,一个用于插入,一个用于删除)

答案 1 :(得分:0)

你可以试试这个:

UPDATE table1 dest, (SELECT * FROM table2 where provider=2) src 
SET dest.provider = src.provider where dest.provider=2;