我有两个表,username
和score
。两者都使用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
答案 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