2015-02-23 39 views
0

我有兩張表用於存儲我係統中的匯率。第一個 agent_rate如下。MySQL SELECT UNION不同於單列

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的所有缺失值。我想在一列中使用不同的聯合聲明,但是我沒有。我的當前的解決方案如下(視覺工作室)

  1. agent_rate表和填充率的數據表中選擇
  2. 在速率數據表
  3. 選擇並填補EXCHANGE_RATE表到一個臨時
  4. 設置唯一字段即ID從臨時的數據表的數據表
  5. 移動記錄對數據表和忽略錯誤

生成的表是(應該是)如下:

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中做到這一點?

+0

[MYSQL UNION DISTINCT]的可能重複(http://stackoverflow.com/questions/6965333/mysql-union-distinct) – 2015-02-23 10:41:04

回答

1

您可以從交換表

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 

​​3210返回所提供列表中的第一個非空值加入表是否存在,他們首先選擇代理值,否則vaolue。

+0

但是,如果一個行存在,它的速率列爲NULL,應該爲NULL或e。返還率? – jarlh 2015-02-23 10:14:31

+0

誰說有這樣一個空列?在示例中看起來不像。爲什麼總是讓事情變得困難,如果他們不需要呢? – 2015-02-23 10:16:04

+0

考慮表格定義的後果,這對OP來說更是一個問題。 (就像帶有NOT IN子查詢的應用程序突然不再工作一樣,只是因爲第一個NULL值在那裏...) – jarlh 2015-02-23 10:21:41