从subselect返回行

时间:2011-02-18 01:24:54

标签: mysql select subquery

我有这个MySQL DB方案:

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

我需要写一个返回结果的选择:他拥有的登录和最大硬币以及这枚硬币的货币。

我尝试过类似的东西:

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列”。 我期待它,但我不知道如何做到这一点。

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

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

感谢您的时间。

1 个答案:

答案 0 :(得分: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 

如果是关系,上述查询将返回所有具有最高价值的硬币,如果您只想选择其中一个硬币,则可以向外部查询添加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