2

因此,我有一个 SQL 表:

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

我想使用单个 select 语句返回所有排名大于用户 e 排名值的行。

这可以用一个语句来实现吗?

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

这只是@UweB 的一个编辑脚本。即使用户名='e' 有多行,它也会返回最大排名

SELECT *
FROM tbl 
WHERE
tbl.rank > (
   SELECT max(rank) FROM tbl WHERE username = 'e')
于 2013-08-07T06:20:28.100 回答
2

您可以使用子查询

SELECT * FROM `table` WHERE `rank` > (
SELECT `rank` FROM `table` WHERE `username` ='b' LIMIT 1)
于 2013-08-07T05:56:59.893 回答
1
SELECT *
FROM tbl 
WHERE
   tbl.rank > (
       SELECT rank FROM tbl WHERE username = 'e'
   );

请注意,这仅在子选择(括号中的部分)仅返回单个值(可以说是一行,一列)时才有效。

于 2013-08-07T05:56:54.797 回答