我的系统中有两个用于存储汇率的表。第一个 agent_rate如下。
ID Currency Rate
=======================
3 GBP 0.65
4 EUR 0.70
5 JPY 57.4
第二个表exchange_rate如下。
ID Currency Rate
=======================
1 USD 1
2 ZMK 200
3 GBP 0.5
4 EUR 0.75
5 JPY 60.4
6 CHF 0.9
我想选择第一个表 agent_rate 中的所有行,然后添加 exchange_rate 表中 ID 的所有缺失值。我想在单个列上使用带有不同的联合语句,但我失败了。我当前的解决方案如下(Visual Studio)
- 从 agent_rate 表和填充率数据表中选择
- 设置唯一字段,即费率数据表中的 ID
- 从 exchange_rate 表中选择并填充到临时数据表中
- 将记录从临时数据表移动到速率数据表并忽略错误
结果表(应该)如下:
ID Currency Rate
=======================
1 USD 1
2 ZMK 200
3 GBP 0.65
4 EUR 0.70
5 JPY 57.4
6 CHF 0.9
有没有更好的方法在 Sql 中做到这一点?
最佳答案
您可以加入表并首先选择代理值(如果存在),否则从交换表中选择值
select coalesce(a.id, e.id) as id,
coalesce(a.currency, e.currency) as currency,
coalesce(a.rate, e.rate) as rate
from exchange_rate e
left agent_rate a on a.id = e.id
coalesce
返回所提供列表中的第一个非空值。
关于c# - MySQL SELECT UNION 在单列上不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28671145/