1

単純な mysql リクエストを実行しようとしていますが、問題が発生しています。

以下のように定義された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'

一致する行がある場合でもNULL、テーブルから値が返されますexchange_rates

削除しようとしましLIMIT 1たが、このようにすると、アクティブな通貨のすべての行が返されます。これは私が望む解決策ではありません

このクエリはどのように表示されますか?

ありがとう!

4

2 に答える 2

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' 
于 2012-11-19T11:46:28.903 に答える
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
于 2012-11-19T11:39:57.307 に答える