2012-11-19 69 views
1

我正在嘗試做一個簡單的mysql請求,我遇到了問題。MySQL JOIN返回意外值

我有一個像下面定義的2個表:

currencies 
______________________________________________________________________________________ 
currency_id | currency_name | currency_symbol | currency_active | currency_auto_update 

exchange_rates 
____________________________________________________________________________________________________ 
exchange_rate_id | currency_id | exchange_rate_date | exchange_rate_value | exchange_rate_added_date 

我想要做的是選擇內部exchange_rates最後一排的積極貨幣。

我做了這樣的:

SELECT c.currency_id, c.currency_name, c.currency_symbol, c.currency_active, er.exchange_rate_id, er.exchange_rate_date, er.exchange_rate_value 
FROM currencies c 
LEFT JOIN (
    SELECT er1.exchange_rate_id, er1.currency_id, er1.exchange_rate_date, er1.exchange_rate_value 
    FROM exchange_rates er1 
    ORDER BY er1.exchange_rate_date DESC 
    LIMIT 1 
    ) AS er 
ON er.currency_id=c.currency_id 
WHERE c.currency_active='1' 

這是我返回值NULLexchange_rates表,即使有匹配的行

我試圖刪除LIMIT 1,但如果我這樣做像這樣將所有行返回給活動貨幣,這不是我想要的解決方案

該查詢應該如何看起來像?

謝謝!

回答

3

試試這個:

SELECT c.currency_id, c.currency_name, c.currency_symbol, c.currency_active, er.exchange_rate_id, er.exchange_rate_date, er.exchange_rate_value 
FROM currencies c 
LEFT JOIN (SELECT * FROM 
    (SELECT er1.exchange_rate_id, er1.currency_id, er1.exchange_rate_date, er1.exchange_rate_value 
    FROM exchange_rates er1 
    ORDER BY er1.exchange_rate_date DESC) AS A GROUP BY currency_id 
    ) AS er 
ON er.currency_id=c.currency_id 
WHERE c.currency_active='1' 
+0

這是工作正常..感謝您的答案..有太多的選擇,我認爲,但工作,因爲我認爲 –

+0

我看到這個工作正常...好!我不知道GROUP BY查詢會返回第一條記錄... +1 – fthiella

0

查詢的想法看起來是正確的。您的左連接查詢應返回具有最新匯率的行。你可以在這裏使用內部連接,因爲必須有一個貨幣指的這個...

SELECT c.currency_id, c.currency_name, c.currency_symbol, c.currency_active, er.exchange_rate_id, er.exchange_rate_date, er.exchange_rate_value 
FROM currencies c 
INNER JOIN exchange_rates_er1 e ON e.currency_id = c.currency_id 
WHERE c.currency_active='1' 
ORDER BY e.exchange_rate_date DESC 
LIMIT 1 
+1

這樣做的問題是,它僅適用於一種貨幣返回數據。我認爲OP希望每個貨幣返回一行。 –

+0

我看到了...你已經給了組串列的提示,所以沒有什麼可以在這裏做:) – ChaosClown