如何只select第一个满足条件的元素?

How to select only the first elements satisfying a condition?

我有以下table(真实问题的简化):

+----+-------+
| id | value |
+----+-------+
|  1 | T     |
|  2 | T     |
|  3 | F     |
|  4 | T     |
+----+-------+

现在,一个简单的 SELECT id FROM Table WHERE value='T'; 就能得到值为 T 的所有 ID,但在上面的示例中,我只需要前 2 个(1 和 2)。

最好的方法是什么?我不想使用 while 循环。

我标记了它 MySQL,但适用于大多数数据库引擎的解决方案会更好。

编辑:根据答案,我可能不够清楚:
我只想要值为 'T' 的第一个 ID。这可以是从无值到所有值的任何值。

编辑 2:另一个例子:

+----+-------+
| id | value |
+----+-------+
|  1 | F     |
|  2 | T     |
|  5 | T     |
|  6 | F     |
|  7 | T     |
|  9 | T     |
+----+-------+

结果为 [].

示例 3:

+----+-------+
| id | value |
+----+-------+
|  1 | T     |
|  2 | T     |
|  5 | T     |
|  6 | F     |
|  7 | T     |
|  9 | T     |
+----+-------+

结果:[1, 2, 5]

你想要这么简单的东西吗?只是限制结果?

select id from table where value = 'T' order by id asc limit 2

如果出于某种原因您想要最后两场比赛而不是前两场比赛,只需将顺序更改为 desc 而不是 asc

我看到标准有点变化了。

select id
  from `table` t
    where t.id >= (select @min := min(id) from `table` t2 where value = 'T') 
      and not exists (select id from `table` t3 where value = 'F' and id > @min and id < t.id)
   and value = 'T'

demo here

如果您不想在第一个值为 'F' 时没有结果,那么这个:

select id
  from `table` t
    where 
       not exists (select id from `table` t3 where value = 'F' and id < t.id)
   and value = 'T'

尝试使用 LIMIT 2 如下所示

SELECT id 
FROM Table 
WHERE value='T'
ORDER BY id
LIMIT 2

如果 ID 自动递增,则可以使用 order by limit

select * from table_name where value = 'T' order by id limit 2

如果您不需要对数据进行任何排序或排序

  SELECT id FROM Table WHERE value='T' limit 0,2

如果您想按 ID 订购,您可能需要添加 'ORDER BY'。例如

SELECT id FROM Table WHERE value='T' order by id limit 0,2

您可以获得第一次出现的 'F' 的 ID,然后在条件中使用。
你可以这样做:

SELECT id FROM tables where id < (select AVG(id) FROM tables WHERE value = 'F' ORDER BY id LIMIT 1)