SQLなら俺に訊け [無断転載禁止]©2ch.net (457レス)
SQLなら俺に訊け [無断転載禁止]©2ch.net http://mevius.5ch.net/test/read.cgi/tech/1499985653/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
8: デフォルトの名無しさん [sage] 2017/08/26(土) 19:24:02.61 ID:DSilAr/A foo_id, bar_id_list "1", "1,2,3" "2", "4,5" "3", "6,7,8" これを foo_id, bar_id "1", "1" "1", "2" "1", "3" "2", "4" "2", "5" "3", "6" "3", "7" "3", "8" こう変換するクエリって書ける? なるべく標準がいいけどポスグレ依存でも可 http://mevius.5ch.net/test/read.cgi/tech/1499985653/8
9: デフォルトの名無しさん [] 2017/08/30(水) 07:14:19.33 ID:FYBJnXXr >>8 お前は秘密の合言葉を言ってない。 「お願いします。どうか教えて下さい」 http://mevius.5ch.net/test/read.cgi/tech/1499985653/9
10: 8 [sage] 2017/08/30(水) 08:02:42.85 ID:ItMe6Tvy 再帰クエリでできました SQLは業務で使うことも多いのにSQLスレに人がいないのは寂しいですね http://mevius.5ch.net/test/read.cgi/tech/1499985653/10
11: デフォルトの名無しさん [sage] 2017/11/03(金) 19:41:06.46 ID:N8t7Jq3a てす http://mevius.5ch.net/test/read.cgi/tech/1499985653/11
12: デフォルトの名無しさん [] 2017/11/03(金) 20:07:37.65 ID:N8t7Jq3a 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)だと場合によっては中途半端なデータが返る時があり、これは避けたいのです。 なお初心者の為上記前提がいろいろ間違っているかもしれませんが、その辺はご指摘下さい。 http://mevius.5ch.net/test/read.cgi/tech/1499985653/12
13: デフォルトの名無しさん [sage] 2017/11/03(金) 22:59:45.82 ID:ATL1IZSq SQLiteがreadでトランザクション使えないって、そうだっけ? デフォルトがrepeatable readじゃないから勘違いしてるとかじゃなくて? http://mevius.5ch.net/test/read.cgi/tech/1499985653/13
14: デフォルトの名無しさん [sage] 2017/11/03(金) 23:25:25.83 ID:N8t7Jq3a >>13 そうなのかもしれませんが、それを変える方法が分かりません。 SQL自体はSQL92準拠らしいです。 http://www.sqlite.org/fullsql.html ちなみにトランザクションのページはこちら。 http://www.sqlite.org/lang_transaction.html なお、select自体は一つのトランザクションらしく、例えば上記(A)(B)を繋いで begin; commit;で囲むと、 「トランザクション中でトランザクションを開始出来ません」というエラーになります。 // Error: cannot start a transaction within a transaction http://mevius.5ch.net/test/read.cgi/tech/1499985653/14
15: デフォルトの名無しさん [sage] 2017/11/03(金) 23:38:29.19 ID:N8t7Jq3a ああすいません、これですかね? PRAGMA read_uncommitted; http://www.sqlite.org/pragma.html#pragma_read_uncommitted ここの書き方だとよく分からないのですが、 デフォはSERIALIZABLEで、これをREAD UNCOMMITTED(true)にして、 さらに書き込み側をBEGIN EXCLUSIVEにしろってことですかね? > After a BEGIN IMMEDIATE, > no other database connection will be able to write to the database or do a BEGIN IMMEDIATE or BEGIN EXCLUSIVE. > Other processes can continue to read from the database, however. > An exclusive transaction causes EXCLUSIVE locks to be acquired on all databases. > After a BEGIN EXCLUSIVE, > no other database connection except for read_uncommitted connections will be able to read the database > and no other connection without exception will be able to write the database until the transaction is complete. > http://www.sqlite.org/lang_transaction.html http://mevius.5ch.net/test/read.cgi/tech/1499985653/15
16: デフォルトの名無しさん [sage] 2017/11/03(金) 23:58:59.47 ID:N8t7Jq3a あ、いや、違いましたね。 read_uncomitted は制限を緩和する方向でした。 まだ全貌を把握しておらず、ここら辺はすみません。 SQLiteはseriarizableを実装しているとは書いてありますが、デフォが何かはよく分かりません。 > SQLite implements serializable transactions > http://www.sqlite.org/transactional.html ただまあ、今のところ複数selectをトランザクションに指定する方法が分かりません。 多分単発のselectなら自動的にトランザクション化してます。 http://mevius.5ch.net/test/read.cgi/tech/1499985653/16
17: デフォルトの名無しさん [sage] 2017/11/04(土) 01:14:38.64 ID:tY9TOSMT ちなみに記事は古いんですが、複数のselectをbegin/endで囲むことも出来るっぽいんですよね、、、 https://stackoverflow.com/questions/7349189/optimizing-select-with-transaction-under-sqlite-3 私が出来ないのは、こちらの環境の問題でしょうか? PHP経由でのsqlite3.15.1と、コマンドラインの3.21.0の両方で駄目です。 http://mevius.5ch.net/test/read.cgi/tech/1499985653/17
18: デフォルトの名無しさん [sage] 2017/11/04(土) 01:32:35.14 ID:tY9TOSMT >>12を取り下げます。 どうやら私の書き方が悪かったようで、別々に打たないといけないらしく、 そうすればあっさり出来ました。 どうもすいません。 参考にしたページは以下です。 http://d.hatena.ne.jp/hide-K/20090623/1245752394 http://mevius.5ch.net/test/read.cgi/tech/1499985653/18
19: デフォルトの名無しさん [] 2017/11/13(月) 20:26:57.15 ID:612lbeAQ このスレはデータベース板にいるやつのネタスレだな。 count(*)は慣習上、このように書いているだけ。 http://mevius.5ch.net/test/read.cgi/tech/1499985653/19
20: デフォルトの名無しさん [sage] 2017/12/15(金) 21:10:52.36 ID:Tb0OcKpN SQLは重いというイメージが頭から離れない またとってくればいいだけなんだが どうしても一度取得してきたデータを使いまわしたくてプログラムがぐしゃぐしゃになる http://mevius.5ch.net/test/read.cgi/tech/1499985653/20
21: デフォルトの名無しさん [sage] 2017/12/16(土) 20:45:23.46 ID:VEeoy7XK ん?普通そうだが、何でぐしゃぐしゃになるのかが分からん http://mevius.5ch.net/test/read.cgi/tech/1499985653/21
22: デフォルトの名無しさん [sage] 2017/12/16(土) 21:34:31.55 ID:Bt/T1sYp スコープの長い変数をずっと持ってないといけないから メソッドの引数がふえて だから作ったメソッドが使いづらい http://mevius.5ch.net/test/read.cgi/tech/1499985653/22
23: デフォルトの名無しさん [sage] 2017/12/17(日) 11:36:00.81 ID:5FGxeo64 何の言語か知らんけど、構造体とかクラスで使えば良いのでは? 取り敢えず一度取得してきたデータは使いまわすのが基本 その都度発行とか有り得んから、使いまわせるように工夫すべき http://mevius.5ch.net/test/read.cgi/tech/1499985653/23
24: デフォルトの名無しさん [sage] 2017/12/17(日) 13:31:30.67 ID:qopiqGcR えー せっかくDB側でSQLキャッシュしてくれる機能もってんのに プログラムでもまたキャッシュの仕組みつくるん? http://mevius.5ch.net/test/read.cgi/tech/1499985653/24
25: デフォルトの名無しさん [sage] 2017/12/20(水) 09:30:16.27 ID:CxRyWMoc SQLってサーバー立てるのがデフォなんですか? http://mevius.5ch.net/test/read.cgi/tech/1499985653/25
26: デフォルトの名無しさん [sage] 2017/12/21(木) 21:57:46.42 ID:URpfxR/O そんなの使い方に依るでしょ SQLiteのが遥かに適してるのにネットワーク型拵えてるアンチパターンはかなり見るが この逆は滅多に見ない、SQLiteは玩具過ぎて使えないと言ってる使えない人間はかなり居る http://mevius.5ch.net/test/read.cgi/tech/1499985653/26
27: デフォルトの名無しさん [sage] 2017/12/21(木) 22:06:03.87 ID:Mqu0aN7Q そりゃそうだろ逆にしたら作れないじゃんw http://mevius.5ch.net/test/read.cgi/tech/1499985653/27
28: デフォルトの名無しさん [sage] 2018/01/28(日) 14:32:23.14 ID:Erw8GBm0 AccessでのVBAの開発の話なんだが、他言語含めて飽きるほどコード書いてきたという人がSQLで書くようなことはしないと言うんだ。 デザインビューでクエリー作るんだって。 俺とは余りに文化が違うんだが、これって俺がおかしいのかな。 それとも彼がビックマウスなのかどっちだと思う? http://mevius.5ch.net/test/read.cgi/tech/1499985653/28
29: デフォルトの名無しさん [sage] 2018/01/28(日) 15:54:33.89 ID:BfkgINY1 Accessは知らんが。 これ見る限り、そのやり方もありだろう。 https://www.microsoft.com/japan/office/previous/xp/suminaka/access/sousa/1/sousa1_15_2_honbun.htm http://www.microsoft-access.net/start/query-2.html > 俺とは余りに文化が違うんだが、これって俺がおかしいのかな。 > それとも彼がビックマウスなのかどっちだと思う? お前がおかしいことは確定だが、(ただしお前が言っている意味ではない) 彼がビッグマウスかというのは意味が分からない。(だからお前はおかしい) そもそも、やり方は一つじゃない。どっちが正しいという考え方がおかしい。 そいつにとって効率がいい方法を使えばいいだけ。 この画面通りに動くのなら、クエリ結果画面を見ながらGUIでプログラミングできる。 手打ちでSQL書いて動かしてデバッグするより早いのは確かだよ。 同様な物に、VSのフォームデザイナがある。 さすがにあれを全部手打ちする奴はいないと思うが、技術的には出来る。 あれは毎回Form1.hをパースして表示しているだけだから。 ただしパーサは自動出力の結果を読み込む前提で全くロバストではないから、 少しでもエラーがあったら止まってしまい、それ以降デザイナが使えなくなる。 だから手打ちは推奨されていない。とはいえ、出来る。 http://mevius.5ch.net/test/read.cgi/tech/1499985653/29
30: デフォルトの名無しさん [sage] 2018/01/28(日) 15:55:43.16 ID:BfkgINY1 以下は推測になるが、、、 おそらくAccessも同様に、自動作成クエリを読み込んで表示するようになっていると思われる。 その場合、手打ちでクエリを作成されると、そこでエラーが発生した場合、クエリデザイナが使えなくなってしまう。 だから、プロジェクトとして、「クエリデザイナしか使うな」みたいな縛りはあり得る。 局所的に手打ちでクエリ書いたとして、そこがデザイナ側に読み込まれないのならエラーにはなりようもないが、 後の人が手打ちでクエリを書けない人ならメンテナンスが出来なくなってしまう。 ただし、デザイナに頼りすぎると後々色々大変になるので、 中にはデザイナは最低限しか使うな、という人もいる。 フォームの場合は「イベントをデザイナで書くな」みたいになるわけだが、 Accessの場合は「クエリをデザイナで書くな」になるんじゃないかな? だから、そこはやり方の問題だ。 どっちが正しいかではなく、どちらを選ぶかだ。当然、チームの他の人員のスキルも考慮しないといけない。 Accessの場合にどちらが主流派なのかは俺は知らない。 ただな、SQLってのはDB用アセンブラみたいなもので、 実際、そんな物をいちいち手打ちしてたら効率は上がらないだろ。 SQLは未来永劫手で書くものだ、と思っているのならお前がおかしい。 (俺は使ったこと無いが)ORMはそこを完全に隠蔽していて、SQLなんて当然自動生成で、 プログラマがいちいち書くはずもないだろ。(現実にはそうでもないらしいが、少なくともそこを目指しているだろ) ただし、スキルとしては当然読めた方がいいし、手でも書ける人が手抜きする為にデザイナを使うのが本来は正しい。 だから君の立ち位置は間違ってはいない。 君はデザイナを覚えて、君のプロジェクトではどちらを使うか判断すればいいだけ。 既にあるプロジェクトに参加するなら、そのプロジェクトの流儀に従うしかない。 繰り返すが、俺はAccess知らないから、Accessの文化については他の人を待て。 http://mevius.5ch.net/test/read.cgi/tech/1499985653/30
31: デフォルトの名無しさん [sage] 2018/05/21(月) 19:04:06.55 ID:aAfPm2kk SQLでJOIN等の結果に別名を付けるエイリアスってありますか? http://mevius.5ch.net/test/read.cgi/tech/1499985653/31
32: デフォルトの名無しさん [] 2018/05/22(火) 02:42:52.45 ID:BxsxaQQf >>21 サブクエリにして別名つければ http://mevius.5ch.net/test/read.cgi/tech/1499985653/32
33: デフォルトの名無しさん [sage] 2018/05/23(水) 11:08:43.69 ID:+HKSXK/9 >>32 解決しました。ありがとうございました。 ところでミックさんの本は名著だと思いますが、セルコを読んでみたら、むちゃくちゃわかりやすくて驚きました。 プログラミングの本は洋書に限るという主張はかなり当たっていますね。 http://mevius.5ch.net/test/read.cgi/tech/1499985653/33
34: デフォルトの名無しさん [] 2018/05/24(木) 01:57:22.85 ID:UTbVU3sw 日本語でもあれだけの容量を割ければわかりやすく書けるのでは。 日本語の技術書って2000部出ればヒットの部類だって言うし 国産で6000円の本がどれだけ売れるやら(=コストがかけられるか) 楽器の教則とかも似た感じだが 勢い初心者向けの入門書が多くなり、レベルの高い本はページ数が足らなくて 分かる人だけ分かってとか分かってる人が知識の確認に使う本が多い気がする 個人的には洋書(の翻訳)は 「もうxxでxxする必要はないのです!」 みたいな無駄な例えとかジョークが多くてちょっとイラっとする時がある http://mevius.5ch.net/test/read.cgi/tech/1499985653/34
35: デフォルトの名無しさん [sage] 2018/05/24(木) 21:00:50.73 ID:tj3fGZUH SQLで超高速スクロールシューティングゲームを作りたいのですがどこから勉強したらいいのかわかりません http://mevius.5ch.net/test/read.cgi/tech/1499985653/35
36: デフォルトの名無しさん [sage] 2018/05/26(土) 08:25:51.19 ID:ww7rlXCh 何のネタ? http://mevius.5ch.net/test/read.cgi/tech/1499985653/36
37: デフォルトの名無しさん [sage] 2018/05/30(水) 21:07:58.36 ID:mJRov030 SQLが出来なさ過ぎて今日解雇されました・・・ http://mevius.5ch.net/test/read.cgi/tech/1499985653/37
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 420 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.016s