SQL初心者です。
複数のrowを一度に取りたいのですがどう書けばいいのでしょうか。
後述の(C)より効率のよい記述を探しています。
(なおRock54回避の為シングルクオートを全角に、またselectをカタカナに変更しています)
用途は掲示板で、以下のような「先頭と最近の5投稿」の取得が目的です。
https://mevius.5ch.net/tech/
環境はSQLiteです。SQLite依存で構いません。
単純には以下2クエリになりますが、
select * from thread order by no limit 1; // (A)
select * from thread order by no desc limit 5; // (B)
A-B間で更新されたときに過渡状態のデータが返ることを避けるため、一つに纏めたいのです。
SQLiteでは読み込みにはトランザクションが使えず、BEGIN/COMMITで囲んでブロック出来ません。
試行錯誤して一応以下のクエリは通るようですが、サブクエリが効率が悪く見えるのでもっと良い書き方を探しています。
セレクト from ’1234’ where no in (values(’1234’) union セレクト no from ’1234’ order by rowid desc limit 6); // (C)
ここで1234はスレッド名=スレッド最初の投稿Noです。
4chanのように板毎にNoが打たれており、スレ内のNoは飛び飛びになっています。
なお前側values部分もサブクエリにして先頭番号を取得する limit 1のサブクエリも書き方があれば教えてください。
(デバッグ時に使う)
これも出来ません。例えば、以下は通りません。
セレクト * from ’1234’ where no in ((セレクト no from ’1234’ limit 1) union セレクト no from ’1234’ order by rowid desc limit 6); // (D)
// limitはunionの後に、とエラーが出る
(A)+(B)は同時にデータも取得する為、(C)より効率がいいと考えています。
(データの順序が異なるが、簡単にカバー出来る範囲なので問題ない)
ただし(A)+(B)だと場合によっては中途半端なデータが返る時があり、これは避けたいのです。
なお初心者の為上記前提がいろいろ間違っているかもしれませんが、その辺はご指摘下さい。
SQLなら俺に訊け [無断転載禁止]©2ch.net
12デフォルトの名無しさん
2017/11/03(金) 20:07:37.65ID:N8t7Jq3aレスを投稿する
ニュース
- 人力舎、渡部建に関するSNS投稿に声明 鬼越トマホーク・良ちゃんを名指し「到底看過できない」「渡部の人格を著しく傷つける表現」★3 [Ailuropoda melanoleuca★]
- 【MLB】大谷翔平の「ボブルヘッドデー」なのに… 本拠地観衆は5万人割れ 4004個が余った計算に 移籍1年目の熱狂はどこへ [冬月記者★]
- 【名古屋】ベトナム国籍の男性を不起訴に 郵便局でクマよけスプレーがまかれ、男女5人が救急搬送された事件 [シャチ★]
- 【W杯】フランス代表、近年の充実ぶりは何なのか… 直近7大会で優勝と準優勝が2度ずつ、最多4度の決勝進出は続く3カ国の2倍 [首都圏の虎★]
- 【衝撃】内閣広報官、高市総理の経歴疑惑で「捏造ポスト」を発信か…総理の「アメリカ人元上司」が明かした驚きの事実 [ぐれ★]
- 【W杯】おぎやはぎ「優勝ってよく掲げたな」W杯8強進出国と比較し「日本がこれ以上…」本音吐露 [首都圏の虎★]
- 歴代プロ野球選手の名前で1000レスめざすスレッド
- 黒バスの赤司征十郎←こいつ
- ついに夜も暑くなってきたな!扇風機つけてみろ
- 面接官「世界一年が明けるのが早いのはどこの国か?」 僕「知らないので答えられません」 面接官「…」 僕「…」
- 【悲報】最上あいさん、55回も刺され何度も「やめて」と懇願していた…★2 [151291598]
- 【高市悲報】ひろゆき「天皇制の正統性は科学的な血統ではなく、社会が共有する物語にある、その前提なら愛子内親王の方が自然」 [733893279]