4

私はこのようなSqliteデータベーステーブルを持っています(昇順なし)

ここに画像の説明を入力

しかし、名前で昇順でテーブルを取得する必要があります。昇順で設定すると、rowId は次のように乱雑に変化します

ここに画像の説明を入力

しかし、毎回昇順で限られた数の連絡先5を取得する必要があります

Aaa-EeeeそしてFfff -Jjjjjのように......

しかし、0-5 5-10 のような制限を設定するには .... ** 乱雑な順序になっているため、ROWID を使用できます

だから私は(オラクルのrowNum)のような別の列が必要です.1234567の順序で...毎回次のようになります

ここに画像の説明を入力

その列を既存の列で取得する方法

Note: WE DONTE HAVE ROWNUM LIKE COLUMN IN SQLITE

4

3 に答える 3

17

偽のrownumソリューションは賢いですが、うまくスケーリングできないのではないかと心配しています(複雑なクエリの場合、各行を結合して、現在の行の前の行数をカウントする必要があります)。

の使用を検討しcreate table tmp as select /*your query*/ます。create as select 操作の場合、行を挿入するときに作成される行 ID は、rownum (カウンター) とまったく同じになるためです。SQLite doc で指定されています。

最初のクエリが挿入されたら、tmp テーブルにクエリを実行するだけです。

select rowid, /* your columns */ from tmp
order by rowid
于 2013-10-05T15:09:20.950 に答える
6

オフセット/リミットを使用できます。

5 行の最初、2 番目、3 番目のグループを取得します。

select rowid, name from contactinfo order by name limit 0, 5
select rowid, name from contactinfo order by name limit 5, 5
select rowid, name from contactinfo order by name limit 10, 5

警告、上記の構文を使用するには、SQLite が以前のすべてのレコードをソート順に読み取る必要があります。したがって、上記のステートメント番号 3 の 10 番目のレコードを取得するには、SQLite は最初の 9 レコードを読み取る必要があります。多数のレコードがある場合、これはパフォーマンスの観点から問題になる可能性があります。

制限/オフセットの詳細:

Sqlite クエリの最適化 (制限とオフセットを使用)

Sqlite LIMIT / OFFSET クエリ

于 2012-12-24T16:41:56.593 に答える
2

これは RowNum を偽造する方法です。お役に立てば幸いです。

SELECT 
   (SELECT COUNT(*)
    FROM Names AS t2
    WHERE t2.name < t1.name
   ) + (
      SELECT COUNT(*) 
      FROM Names AS t3 
      WHERE t3.name = t1.name AND t3.id < t1.id
   ) AS rowNum,
   id,
   name
FROM Names t1
ORDER BY t1.name ASC

SQL フィドルの例

于 2012-12-24T16:00:46.210 に答える