私はこうしてSQLテーブルを持っています:
username | rank
a | 0
b | 2
c | 5
d | 4
e | 5
f | 7
g | 1
h | 12
ユーザー e のランクの値よりもランクが高いすべての行を返す単一の select ステートメントを使用したいと考えています。
これは単一のステートメントで可能ですか?
はい、可能です。
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';
サブクエリを使用できます
SELECT * FROM `table` WHERE `rank` > (
SELECT `rank` FROM `table` WHERE `username` ='b' LIMIT 1)
これは @UweB の単なる編集スクリプトです。username='e' の行が複数ある場合でも最大ランクを返します。
SELECT *
FROM tbl
WHERE
tbl.rank > (
SELECT max(rank) FROM tbl WHERE username = 'e')
SELECT *
FROM tbl
WHERE
tbl.rank > (
SELECT rank FROM tbl WHERE username = 'e'
);
これは、サブ選択 (括弧内の部分) が単一の値 (いわば 1 行、1 列) のみを返す場合にのみ機能することに注意してください。