如何选择得分最高的前5个用户名

时间:2012-07-01 22:06:58

标签: mysql sql

我有两个表,usernamescore。两者都使用user_id连接。

我想选择得分最高的前5个用户名。我正在尝试跟踪查询,但它无法正常工作:

SELECT `user_name`  
  FROM `username` 
 WHERE `user_id` = ( SELECT `u_id` 
                       FROM `score` 
                       ORDER BY `high_score` DESC 
                       LIMIT 5 )

运行上述查询时出现此错误:#1242 - Subquery returns more than 1 row

2 个答案:

答案 0 :(得分:5)

在你的WHERE子句中,你试图断言一个值(在左侧)与值列表(在右侧)的一致性或相等性。

使用IN运算符来实现此目的,因为它会将左值与任何正确的值进行比较。

以下是您更正后的代码。

SELECT    `user_name`
    FROM  `username`
    WHERE `user_id` IN(
              SELECT        `u_id`
                  FROM      `score`
                  ORDER BY  `high_score` DESC
                  LIMIT 5
              );

使用连接的样式方式更清晰,更优雅,特别是对于像这样的简单查询。

SELECT        `u`.`user_name`
    FROM      `username` AS `u`
    INNER JOIN `score` AS `s`
        ON     `u`.`user_id` = `s`.`u_id`
    ORDER BY  `s`.`high_score` DESC
    LIMIT      5;

答案 1 :(得分:5)

试试这个:

SELECT `user_name`  
FROM `username`,`score` 
WHERE `user_id` = `u_id` 
ORDER BY `high_score` DESC 
LIMIT 5