我有下表(简化真正的问题):
+----+-------+
| id | value |
+----+-------+
| 1 | T |
| 2 | T |
| 3 | F |
| 4 | T |
+----+-------+
现在一个简单的SELECT id FROM Table WHERE value='T';
会得到值为T的所有ID,但在上面的示例中,我只需要前两个(1和2)。
最好的方法是什么?我不想使用while循环。
我将它标记为MySQL,但是适用于大多数数据库引擎的解决方案会更好。
编辑:根据答案,我可能不够清楚:
我只想要第一个ID值是' T'。这可以是从无值到所有值的任何值。
编辑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]
答案 0 :(得分:1)
你是在追求像这样简单的事情吗?只是限制结果?
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'
如果你想在第一个值为'F'时没有结果,那么这个:
select id
from `table` t
where
not exists (select id from `table` t3 where value = 'F' and id < t.id)
and value = 'T'
答案 1 :(得分:1)
如果ID自动递增,则可以使用order by
limit
select * from table_name where value = 'T' order by id limit 2
答案 2 :(得分:0)
尝试LIMIT 2
,如下所示
SELECT id
FROM Table
WHERE value='T'
ORDER BY id
LIMIT 2
答案 3 :(得分:0)
如果您不需要数据中的任何订单或排序
SELECT id FROM Table WHERE value='T' limit 0,2
如果您想按ID排序,可能需要添加'ORDER BY'。 e.g。
SELECT id FROM Table WHERE value='T' order by id limit 0,2
答案 4 :(得分:0)
您可以获得第一次出现的&#39; F&#39;然后在条件下使用。
你可以这样做:
SELECT id FROM tables where id < (select AVG(id) FROM tables WHERE value = 'F' ORDER BY id LIMIT 1)