2

私はこうしてSQLテーブルを持っています:

username  |  rank 
a         |  0
b         |  2
c         |  5
d         |  4
e         |  5
f         |  7
g         |  1
h         |  12

ユーザー e のランクの値よりもランクが高いすべての行を返す単一の select ステートメントを使用したいと考えています。

これは単一のステートメントで可能ですか?

4

4 に答える 4

8

はい、可能です。

SELECT * FROM MyTable 
WHERE rank > (SELECT Rank FROM MyTable WHERE username = 'e')

またはself-join、同じために使用することもできます

SELECT t1.* FROM MyTable t1
  JOIN MyTable t2
    ON t1.Rank > t2.Rank
   AND t2.username = 'e';

このSQLFiddleを参照してください

于 2013-08-07T05:56:03.407 に答える
2

サブクエリを使用できます

SELECT * FROM `table` WHERE `rank` > (
SELECT `rank` FROM `table` WHERE `username` ='b' LIMIT 1)
于 2013-08-07T05:56:59.893 に答える
2

これは @UweB の単なる編集スクリプトです。username='e' の行が複数ある場合でも最大ランクを返します。

SELECT *
FROM tbl 
WHERE
tbl.rank > (
   SELECT max(rank) FROM tbl WHERE username = 'e')
于 2013-08-07T06:20:28.100 に答える
1
SELECT *
FROM tbl 
WHERE
   tbl.rank > (
       SELECT rank FROM tbl WHERE username = 'e'
   );

これは、サブ選択 (括弧内の部分) が単一の値 (いわば 1 行、1 列) のみを返す場合にのみ機能することに注意してください。

于 2013-08-07T05:56:54.797 に答える