0

2つのテーブルが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

4

2 に答える 2

5

あなたのWHERE節では、1つの値(左側)と値のリスト(右側)の合同または同等性を主張しようとしています。

演算子を使用して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;
于 2012-07-01T22:08:54.007 に答える
5

これを試して:

SELECT `user_name`  
FROM `username`,`score` 
WHERE `user_id` = `u_id` 
ORDER BY `high_score` DESC 
LIMIT 5 
于 2012-07-01T22:12:55.420 に答える