2012-11-19 76 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