2011-02-18 45 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