2017-02-24 18 views
0
  1. SELECT *顧客は5は0

顧客を想定OFFSET限界が細部の表です。上記のクエリは正常に動作しますが、クエリの最後以外のオフセットを指定するとエラーが発生します。オフセットはSQLクエリの最後に指定する必要がありますか?

  1. 以下の詳細を含む表を作成しました。

テーブル名がsms_view あるenter image description here

クエリ:

5はオフセット0 = 2 LIMIT読み取るsms_view FROM

SELECT SMS。

結果は、上記の結果が予想され、それが読み出した値に基づいて

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

Thanks P.Salmon。それは働いている。 – Sandy

+0

- P.Salmon、提供されるソリューションは、期待される結果シナリオに固有のものです。ジェネリックソリューションを得るための方法はありますか – Sandy

+1

どのような方法で汎用ですか? –

関連する問題