根据WHERE条件选择行之后的行

时间:2014-07-11 21:30:13

标签: mysql

例如,让我说我有桌面测试,只有一个属性。

CREATE TABLE test (
    alphabet VARCHAR NOT NULL
);

+----------+
| alphabet |
+----------+
| a        |
| b        |
| c        |
| d        |
| e        |
+----------+

我只想在b之后显示一个行表,所以我会做类似的事情。

SELECT * FROM test WHERE alphabet="b" 

但是这只会给我行b,所以我会使用LIMIT命令来尝试显示其他行。我不知道如何使用LIMIT来做到这一点,因为LIMIT需要一个id而我的表没有任何类型的id或指示符,我该如何显示表格。

+----------+
| alphabet |
+----------+
| c        |
| d        |
| e        |
+----------+

4 个答案:

答案 0 :(得分:3)

SELECT * FROM test 
WHERE alphabet > 'b'

SELECT * FROM test 
ORDER BY alphabet
LIMIT 2, 100

SQLFiddle demo

答案 1 :(得分:0)

这应该有效:

您还可以将大多数运算符应用于文本字段。

Select * from test where alphabet > 'b' 

答案 2 :(得分:0)

你的表架构不好,因为它应该总是有一个唯一的id来使用(看看你的表的规范化)。但这确实提供了你要求的结果..虽然它有时会返回不同的结果,但这不是一个很好的方法。

<强> SETUP:

CREATE TABLE customers (
    `alphabet` VARCHAR(55)
);

insert into customers (`alphabet`)
values
('bill'),
('bob'),
('harry'),
('abe'),
('ben'),
('ashley'),
('cal'),
('fes'),
('parker'),
('gabe'),
('barry'),
('ruben'),
('sam'),
('john'),
('tim');

<强> QUERY:

运行第一个设置用户定义变量的查询,然后运行第二个

SET @QUERY := (
SELECT counter FROM(
SELECT @A := @A + 1 counter, alphabet FROM customers
CROSS JOIN (SELECT @A := 0) t
) temp 
WHERE alphabet = 'ashley');

SELECT * FROM(
SELECT @A := @A + 1 counter, alphabet FROM customers
CROSS JOIN (SELECT @A := 0) t
) AS temp
WHERE counter > @QUERY;

答案 3 :(得分:-2)

SELECT * FROM test WHERE alphabet NOT IN ('b');