2017-02-24 114 views
0
  1. SELECT *客户LIMIT 5 OFFSET 0

假设客户是细节表。上述查询工作正常,但如果我指定的偏移量以外的查询结束我得到错误。Offset应该在Sql查询的末尾指定吗?

  1. 创建了一个表格,其中包含以下详细信息。

表名是sms_view enter image description here

查询:

SELECT SMS FROM sms_view WHERE读取= 2 LIMIT 5 OFFSET 0;

结果是

enter image description here

以上的结果和预期它是基于读出的值。所以,该表是基于读取值,偏移量和应用于创建的表上的限制而创建的。所以结果如上所示。

但我的要求是,偏移和限制应该适用于整个表,读值应该适用于创建的表。

预期的结果是: enter image description here

我需要预期的结果的查询。

+1

还有什么地方你会想放? 'OFFSET'是属于查询结尾的'LIMIT'子句的一部分。顺便说一句,没有'ORDER BY'子句就没有任何意义。 –

+2

它缺少FROM,所以我们对'fine'有不同的定义 – Strawberry

回答

2

是的,它应该在最后。见https://dev.mysql.com/doc/refman/5.7/en/select.html

SELECT * FROM CUSTOMERS 
ORDER BY somecolumn -- important to get consistent results 
LIMIT 5 OFFSET 0 

另一种方式做同样的事情是:

SELECT * FROM CUSTOMERS 
ORDER BY somecolumn 
LIMIT 0, 5 

或在此情况下(如偏移量为0):

SELECT * FROM CUSTOMERS 
ORDER BY somecolumn 
LIMIT 5 
2
MariaDB [sandbox]> Drop table if exists sms_view; 
Query OK, 0 rows affected (0.10 sec) 

MariaDB [sandbox]> create table sms_view(SMS int,db_id int, `read` int); 
Query OK, 0 rows affected (0.28 sec) 

MariaDB [sandbox]> insert into sms_view values 
    -> (1, 2, 3) , 
    -> (2, 2, 3), 
    -> (3, 2, 2) , 
    -> (4, 2, 2) , 
    -> (5, 2, 2) , 
    -> (6, 2, 2) , 
    -> (7, 2, 2) , 
    -> (8, 2, 2) , 
    -> (9, 2, 2) , 
    -> (10, 2, 2); 
Query OK, 10 rows affected (0.04 sec) 
Records: 10 Duplicates: 0 Warnings: 0 

MariaDB [sandbox]> 
MariaDB [sandbox]> select sms from 
    -> (
    -> SELECT * FROM sms_view LIMIT 5 OFFSET 0 
    ->) s 
    -> WHERE `read` = 2; 
+------+ 
| sms | 
+------+ 
| 3 | 
| 4 | 
| 5 | 
+------+ 
3 rows in set (0.00 sec) 
+0

谢谢P.Salmon。这是工作。 – Sandy

+0

- P.Salmon,提供的解决方案特定于预期的结果方案。有什么方法可以获得通用解决方案 – Sandy

+1

以什么方式通用? –