2013-09-26 52 views
0

我有3個表:選擇MySQL的領域依賴於其他字段值

currency 
id | name 
1 | usd 
2 | eur 

currency_date 
id | date | usd | eur 
1 | 22.09.13 | 10 | 12 
2 | 23.09.13 | 11 | 13 
3 | 24.09.13 | 9 | 10 

cost 
id | id_currency | id_currency_date | cost 
1 |  1  |  2   | 15 

因此,對於具有ID =在1 cost錶行,我們有usd與交換價值11

是否有可能通過其他字段的名稱在不同的表中獲取字段的值?

我認爲它需要是這樣的:

SELECT currency_date.VAR(currency.name) AS cur_val 
FROM cost 
LEFT JOIN currency ON currency.id = cost.id_currency 
LEFT JOIN currency_date ON currency_date.id = cost.id_currency_date 
WHERE cost.id = 1 

currency_date.VAR(currency.name)只是爲了顯示我想要的東西。

+0

如果您對數據進行了規範化處理,並且在您的currency_date表中爲每種貨幣分別記錄,那麼效果會更好。然後一個簡單的加入就可以完成。 – Tom

+0

如果您無法進行標準化,您可以對解決方案進行硬編碼。你預計未來會增加多種貨幣嗎? – Tom

回答

2

這應該這樣做。

SELECT case currency.name when 'usd' then currency_date.usd when 'eur' then currency_date.eur end AS cur_val 
FROM cost 
LEFT JOIN currency ON currency.id = cost.id_currency 
LEFT JOIN currency_date ON currency_date.id = cost.id_currency_date 
WHERE cost.id = 1 
+0

謝謝,它的工作原理...只是用正確的語法編輯的代碼很少。 – Narek

相關問題