2011-02-18 46 views
1

返回行我有这样的MySQL数据库方案:从子查询

users (id, login) 
coins (userid, value, curr) 

我需要写选择将返回结果:登录和最大的硬币,他已经和货币这枚硬币。

我tryed类似的东西:

SELECT login, 
(
    SELECT value, curr 
    FROM coins 
    WHERE coins.userid = users.id 
    ORDER BY value DESC 
    LIMIT 1 
) AS ROW(value, curr) 
FROM users 

它不工作...我获赠错误,即 “操作数应包含1列(S)”。 我期待它,但我不知道任何方式,如何做到这一点。

所以我猜:有没有什么办法从子查询返回多列 - 单行(行)到父查询?

(是的,我可以用两个子查询,但它不是有效的。)

感谢您的时间。

+0

如果有关系(具有相同值的2个硬币的用户)会怎么样? – 2011-02-18 01:29:03

回答

0
SELECT u.login, g.MaxVal, c.curr 
FROM users u JOIN coins c ON u.id = c.userid 
    JOIN (
    SELECT userid, MAX(`Value`) MaxVal 
    FROM coins 
    GROUP BY userid 
) g ON c.userid = g.userid AND c.Value = g.MaxVal 

在领带的情况下,上面的查询将返回所有的硬币的最高值,如果你想只选择硬币1,您可以将GROUP BY添加到外部查询:

SELECT u.login, g.MaxVal, c.curr 
FROM users u JOIN coins c ON u.id = c.userid 
    JOIN (
    SELECT userid, MAX(`Value`) MaxVal 
    FROM coins 
    GROUP BY userid 
) g ON c.userid = g.userid AND c.Value = g.MaxVal 
GROUP BY c.userid