我有一个表格费率,通过前缀的电话费用。说列是 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
答案 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;