我想选择行,直到找到某个值并且它不是数字,所以我不能使用>或者<。我怎样才能做到这一点 ?
示例:
-----
Value
-----
45
434
348
213
543
3445
343
123
34345
我想在543之前选择所有记录(不按任何方式排序)
提前致谢
答案 0 :(得分:3)
清除了“没有订单”的问题,也就是说,您必须选择某种排序方式(例如主键的顺序,或记录分配OID的顺序),问题变成:
"I want all the records whose ordering field is less than the value
of the row for which ordering field is minimum, and VALUE is 543".
因此,您选择值为543的最小行
SELECT MIN(id) AS id FROM yourtable WHERE value = 543
或者,或许,出于其他目的,像
SELECT MIN(id) AS id FROM yourtable WHERE value >= 543
然后选择那个之前的所有记录:
SELECT value FROM yourtable WHERE id < ( SELECT MIN(id) AS id FROM yourtable WHERE value = 543 );
所以你的桌子可能是:
ID Value
-----------
1 45
2 434
3 348
4 213
5 543
6 3445
7 343
8 123
9 34345
你会得到:
45
434
348
213
543
您没有看到订单,但必须是一个。这是id
上的订单。
根据您的要求,value
可以是任何内容 - 文本,甚至是图像BLOB - 并且“排序”保持隐藏。
在某些其他语言中,您可以执行以下操作:
qry = SQL.exec('SELECT * FROM yourtable;');
while ((value = qry.next().value) != '543':
write value '\n'
qry.close()
但是不会指定SELECT
的顺序,并且每次都可能得到不同的结果,或者它将是表格中元组插入的顺序。这与明确使用id
相同。
答案 1 :(得分:3)
这个答案可能会迟到,但因为这是谷歌的第一个结果,术语为'mysql select,直到'希望这可能有助于某人。
您可以做的是声明标记,如果找到了所需的值,请将标记设置为NULL
以外的任何值。然后我们可以使用ISNULL
来检查我们是否已到达该行。
SET @marker = NULL;
SELECT value FROM table1 WHERE ISNULL(@marker:=IF(value=543,value,@marker));
答案 2 :(得分:-3)
您可以在查询中使用相等比较器,直接搜索您要查找的值。
为什么要在您可以指定要搜索的内容之前找到它,直到找到它为止?
您没有举例说明您正在搜索的是什么值,所以如果它是一个字符串
Select x.* from table x WHERE x.Column = 'String Value'
但是,如果你确实想在数据库上添加一些额外的负载(在这个未定义的情况下),你就有了一个存储过程,循环存储在数据库中的ID。
为此,请查看以下帖子,这可能会给您一些启发:SQL LOOP INSERT Based on List of ID's