2017-02-24 19 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

以什麼方式通用? –