2018年、テレビが隠している大ニュース! 0441NAME IS NULL2018/07/20(金) 00:47:16.08ID:qGWP8ju3 ここのキチガイは実行計画もみたことがないからな。文字数が少ないSQLがスマートと言い張る。 なんでプログラマなのに 0442NAME IS NULL2018/07/20(金) 12:58:13.55ID:??? a 0443NAME IS NULL2018/07/20(金) 21:39:10.73ID:??? 実行計画という用語を最近覚えたノロマ w 0444NAME IS NULL2018/07/20(金) 23:08:59.22ID:GJRr/f3G おまえの事やんけ 0445NAME IS NULL2018/07/20(金) 23:40:11.94ID:??? なにか気に触ったのか? w 0446NAME IS NULL2018/07/21(土) 07:43:39.15ID:5x2HyI6i おまえ何時も他人の顔色うかがってばかりやな 0447NAME IS NULL2018/07/21(土) 08:27:53.48ID:??? ノロマは何をやっても駄目だな w 0448NAME IS NULL2018/07/21(土) 12:27:57.38ID:5x2HyI6i おまえの事やんけ 0449NAME IS NULL2018/07/21(土) 13:27:35.31ID:??? 実行計画とか考慮したら、unionはないわw 0450NAME IS NULL2018/07/21(土) 15:38:38.03ID:???>>448 >>444 いつものバカループ w 0451NAME IS NULL2018/07/21(土) 18:42:01.35ID:OaX/dGdR>>449 実行計画がなんなのか分かってますか?
多少の知ったかぶりはかまいませんが、少しは謙虚にわからないことはわからないと言うようにしましょう。 0452NAME IS NULL2018/07/21(土) 18:46:09.10ID:??? その実行計画をやってみたいから、早くUnion使ったSQLをここに晒してくれ 0453NAME IS NULL2018/07/21(土) 18:48:49.51ID:??? unionの1回目のselectで、キャッシュに乗る 0454NAME IS NULL2018/07/21(土) 18:50:04.62ID:??? それぞれのselectが異なるのに? 0455NAME IS NULL2018/07/21(土) 18:55:37.55ID:??? バッファキャッシュ 0456NAME IS NULL2018/07/21(土) 19:22:15.63ID:??? キャッシュに乗るかどうかは実行計画とは直接は無関係だがな キャッシュにのったからって不要なテーブルスキャンが許容できるわけではない 0457NAME IS NULL2018/07/21(土) 20:00:11.00ID:??? でっかいテーブルだとキャッシュに収まるのは無理 0458NAME IS NULL2018/07/21(土) 20:17:41.08ID:??? 条件によってはインデックスしかアクセスしない可能性もあるしな 0459NAME IS NULL2018/07/21(土) 21:13:40.08ID:??? 不要なテーブルスキャン 0460NAME IS NULL2018/07/21(土) 21:14:00.83ID:HTGK0eq2>>451はアホやけどおまえらはその足下にも及ばんアホなんやで? 知らんかったやろ? 0461NAME IS NULL2018/07/22(日) 02:39:53.39ID:ODcS1lTE>>460 実行計画ではなくコストだったと間違いを認めなさい。 0462NAME IS NULL2018/07/22(日) 11:27:50.93ID:zTS56Hn0>>461 おまえが一番アホやなw 0463NAME IS NULL2018/07/22(日) 19:38:32.24ID:??? 条件1〜条件10のうち9個以上の条件を満たすものを抜き出したい。
どうせならインデックスの有無も 0466NAME IS NULL2018/07/22(日) 20:43:15.80ID:??? case whenはそのままid順になるけど、unionはならなかった union all使えば重複の除外が発生するし、変わらないんじゃない? index付けてもunion内のsql実行に影響するだけで、 マージする性能には多分影響しない
続きは各自で 0467NAME IS NULL2018/07/22(日) 21:05:02.26ID:???>>466 ただのunion はdistinctで重複除去、除去しないのがall指定 この例でunion allだと重複行がでるはずだぞ
indexは、unionの各whereには効くだろうけど、caseにはうまく効かないんじゃないかと まあそれで実行性能がひっくり返るとしても、unionで書こうとは思わんが 0468NAME IS NULL2018/07/22(日) 22:25:29.43ID:???>>464 ごめん9は間違いで8以上だったSQL直してくれる? 0469NAME IS NULL2018/07/23(月) 07:46:29.52ID:??? sql自体でなくて申し訳ないが,前の例で、10億レコードで,テーブルが列ストアで保持されているとした場合、whereでー発フィルタリングするのと、unionするのとどっちが効率的なのだろう? 条件が適用されるカラムのメンバー数にもよりそうな気もするが、どんなもんなんでしょうか 0470NAME IS NULL2018/07/24(火) 19:21:58.65ID:yAzT+3qO やってみればいいのに。見た目がシンプルなのと処理の重さは反比例する。 0471NAME IS NULL2018/07/24(火) 21:25:13.19ID:??? 見た目で決まるほど今のオプティマイザはアホじゃないし 0472NAME IS NULL2018/07/27(金) 12:11:49.90ID:??? 質問です。
select a + b +c -d as 計算結果 where 計算結果 > 0
とすると行が表示されません。where句を外すと、 計算結果は0より大きい値でちゃんと出てきます。
where a + b +c -d > 0
と書き換えると表示されたのですが、 where句でselectの as 別名 は使えないのでしょうか? 0473NAME IS NULL2018/07/27(金) 13:33:09.67ID:??? 一部つかえるDBMSもあるようだが原則使えない 0474NAME IS NULL2018/07/27(金) 18:03:08.40ID:??? 普通はselect句でつけた別名を使えるのはorder by句だけだな 04754722018/07/27(金) 18:21:36.74ID:??? そうだったんですね できそうなイメージだったんですが ありがとうございます 0476NAME IS NULL2018/07/27(金) 22:18:42.27ID:??? いい加減使えるようにしろよとは思う 0477NAME IS NULL2018/07/27(金) 22:54:00.11ID:??? select a + b +c -d as 計算結果 having 計算結果 > 0 0478NAME IS NULL2018/07/28(土) 13:12:09.25ID:tm98Iqt0>>475 よく考えてくれ。WHERE句が先に評価され、そのあとにSELECT句の選択リクトが評価される。
いったんSELECTした結果に対して、絞り込みのWHERE句つきSELECTを再度するのを基本としてしまうと、SELECT文は常にフルテーブルスキャンをして、その結果を一時的に保管して、保管した結果に対してさらに検索することになる。 0479NAME IS NULL2018/07/28(土) 13:13:33.29ID:tm98Iqt0>>471 だから見た目をシンプルにするのは意味がないと言っているのだが? 0480NAME IS NULL2018/07/28(土) 13:36:47.39ID:???>>478 なんでそんな難しいことを考えるんだよ… > select a + b +c -d as 計算結果 > where 計算結果 > 0 ってあったら select a + b +c - d as 計算結果 where a + b +c - d > 0 って展開すれば良いだけだろ 0481NAME IS NULL2018/07/28(土) 14:05:45.09ID:???>>479 >見た目がシンプルなのと処理の重さは反比例する 反比例ってどういうことだ? 基本的にはシンプルなSQLほどオプティマイザの裁量が広がって有利なんだが 0482NAME IS NULL2018/07/28(土) 15:08:24.77ID:???>>478 この場合はどっちにしても全行計算してから絞り込むから大差ないような・・・ 0483NAME IS NULL2018/07/28(土) 15:12:20.21ID:???>>478 ああ一時テーブルのメモリと、捜査が2度手間になるのか whereが先だったのか どっかのサイトにselect結果をwhereで絞り込むって書いてたけど 0484NAME IS NULL2018/07/29(日) 09:18:12.72ID:??? ちょっと前のunionの話だけど 処理効率や保守性はおいといて、10個の条件のうち9個を満たすものをとるのにunion使ってどうやるの? 0485NAME IS NULL2018/07/29(日) 09:28:13.30ID:??? それを書いた本人の真意はわからんけど、
(1番目以外の9個を満たすクエリ) union (2番目以外の9個を満たすクエリ) union : でできるはず。 0486NAME IS NULL2018/07/29(日) 09:43:51.54ID:???>>485 それselectごとに条件9個ずつ書くの? 0487NAME IS NULL2018/07/29(日) 09:46:11.97ID:??? ごめん、保守性はおいといてって言ったの自分だね たしかにそのやり方ならできるか 0488NAME IS NULL2018/07/29(日) 09:52:42.06ID:??? 自分なら union 化して where x.cond > 条件 group by id having count(*) > 件数 を副問合せにする 0489NAME IS NULL2018/07/29(日) 10:21:47.78ID:???>>485 unionだけだと元は異なるレコードでも結果が同じだったら1レコードにされちゃう かと言ってunion allだと複数の条件にヒットするレコードが複数出ちゃうよ 0490NAME IS NULL2018/07/29(日) 10:52:46.82ID:??? >unionだけだと元は異なるレコードでも結果が同じだったら1レコードにされちゃう
主キーが存在しないテーブルならともかく、適切なselectリストにすりゃいいだけ。
>かと言ってunion allだと複数の条件にヒットするレコードが複数出ちゃうよ
(1番目を満たさずそれ以外の9個を満たすクエリ)でおk。 0491NAME IS NULL2018/07/29(日) 14:29:08.48ID:??? なんでいまさら話をループさせてるんだ 0492NAME IS NULL2018/07/29(日) 19:49:38.36ID:0RlqY4hk>>491 ここに常にいるキチガイ 0493NAME IS NULL2018/08/21(火) 16:31:56.98ID:??? (プライマリではない) authorがaaaとbbbの最新のレコードをそれぞれ1件ずつ取得したいのですが どのようにしたらいいでしょうか? 最新かどうかは updated_at で判定できます
SELECT * FROM news WHERE author IN ('aaa', 'bbb') 0494NAME IS NULL2018/08/21(火) 17:41:25.74ID:???>>493 もう少し詳しく書いて欲しい テーブル定義と、updated_atでどうやって判定するのかなど 0495NAME IS NULL2018/08/21(火) 18:04:34.79ID:???>>3じゃないのか? 0496NAME IS NULL2018/08/21(火) 21:30:01.28ID:KIn4MzQg MySQLでREPLACE関数を使って複数行を置換するにはどうすればいいのでしょうか?
UPDATE news SET body=REPLACE(body,"あいうえお\r\nかきくけこ\r\n","")
としたのですが、置換できません。 0497NAME IS NULL2018/08/21(火) 21:57:14.63ID:???>>496 出来ると思うんだが、出来ないとしたら bodyの文字列中改行コードが、 replace関数で指定したものと違っているのかも知れない。 0498NAME IS NULL2018/08/22(水) 01:37:20.21ID:???>>497 \nにしても駄目でした。一行だけだと置換できるんですけどね・・・ 0499NAME IS NULL2018/08/22(水) 01:59:39.45ID:???>>498 select hex(body) from table名 とやって、 改行部分を16進数で見てみるとか 0500NAME IS NULL2018/08/22(水) 03:03:57.79ID:???>>494-495 遅くなりました >>3 のをいろいろ弄ってみて実現できました よく見ず質問してしまいすいません。 ありがとうございましたm(_ _)m 0501NAME IS NULL 2018/08/28(火) 06:20:52.88ID:FcSigLis板復帰(OK!:Gather .dat file OK:moving DAT 215 -> 193:Get subject.txt OK:Check subject.txt 215 -> 215:Overwrite OK)0.86, 0.75, 0.74 age subject:215 dat:193 rebuild OK! 0502NAME IS NULL2018/08/30(木) 23:59:48.61ID:??? すいません。DB2でフラッシュバッククエリのコマンドを実行したいのですが、 ググってもOracleのコマンドしか出てきません。 どなたかご教授お願いします。 0503NAME IS NULL2018/08/31(金) 05:07:54.46ID:???>>502 IBM DB2 総合スレ2 https://mevius.5ch.net/test/read.cgi/db/1166153254/0504NAME IS NULL2018/08/31(金) 14:35:48.08ID:??? そっちのスレは過疎ってますし、そもそも回答になってませんが・・・ 0505NAME IS NULL2018/08/31(金) 14:57:35.99ID:??? ここは特定のDBMLの操作方法を質疑するスレじゃないので 0506NAME IS NULL2018/08/31(金) 18:08:53.87ID:??? DB2にフラッシュバッククエリなんかないでしょ ぐぐるとOracleのLogMinerみたいな機能ですら db2ReadLog APIを使って自分で実装しろと出てくる 0507NAME IS NULL2018/08/31(金) 22:40:03.31ID:??? アクセスでの開発なのですが 氏名,エラー内容.エラー回数 A,ダメポ,1 A,無理ぽ,2 B,もうだめ,1 C,むり,1
みたいなものをクエリで出して、行列を入れ替えて 1回目 2回目 A ダメポ 無理ぽ B もうだめ C むり みたいに出力をしようとしています。
これが2万レコードほどあり、処理が重たくて困っています。
select 氏名 MAX(エラー内容) from (抽出クエリ) group by 氏名
等で出力すると、処理が非常に重たく
select 氏名, [1回目].エラー内容 [2回目.エラー内容 from (抽出クエリ where エラー回数=1) as 1回目 left join on (抽出クエリ where エラー回数=2) as 2回目
みたいにしても重たいのです どなたか助けてください 0508NAME IS NULL2018/09/01(土) 16:24:39.15ID:???>>507 エラー回数は最大2ではなくNなわけ? かりにNだった場合SELECT句はどうするつもり? 0509NAME IS NULL2018/09/01(土) 18:48:49.07ID:??? エラー回数は有限で3回までです。 accessがtempテーブルも使えず、実体テーブルにselect into しても それだけなのに、2万件で1時間近くかかってしまっています。 助けてください。。。今日そのことばかり考えながら家事をしていました。つらい 0510NAME IS NULL2018/09/01(土) 19:17:06.19ID:he6NSwN/ 抽出クエリ自体を実テーブルにして氏名にインデック貼って
SELECT 氏名, Max(IIf(エラー回数 = 1,エラー内容,Null)) as 1回目, Max(IIf(エラー回数 = 2,エラー内容,Null)) as 2回目, Max(IIf(エラー回数 = 3,エラー内容,Null)) as 3回目 from 抽出クエリ結果 group by 氏名 order by 氏名
とかかな 0511NAME IS NULL2018/09/01(土) 19:31:19.34ID:??? 抽出クエリってやつは実テーブルじゃなくて何かの条件で抽出した状態のビューを言ってるわけ? それとDBがアクセスってだけでSQL自体は外部ツール(C#とか)から実行するの? 0512NAME IS NULL2018/09/01(土) 19:32:05.22ID:??? 適切なスレが見当たらないんで、ここで聞くんだけど sqlから、ER図を生成する方法ってある? できればoracleで。 イメージ的には、プログラミングで言うと ソースコードからクラス図を生成するイメージ 0513NAME IS NULL2018/09/01(土) 19:35:46.49ID:???>>510 ありがとうございます。 実テーブルに入れるというところで30分以上かかってしまい。 select だけだと1分程度で抜けるのが、insert selectでも select insertでも 30分かかってしまって、その後にクエリ流すのに時間が掛かってしまっています。
>>511 from 句の中に書いたサブクエリになります。 アクセスに対して、エクセルのVBA側から呼び出しをかけています。 0514NAME IS NULL2018/09/01(土) 19:39:12.73ID:he6NSwN/>>512 SQLってDDL分ってこと? 実態テーブルからER作成するのは 有償ツールはいくつかあるけど とりあえずA5とかで試して見たら? https://a5m2.mmatsubara.com/help/ER/ FKとか指定してないとさすが無理だけど 0515NAME IS NULL2018/09/01(土) 19:59:08.40ID:???>>514 DDLではなく、普通のselect分です。 DBにつながる環境で、FKとかはDBから拾ってきてほしい想定です。 実テーブルから、ER図ではなく、 実テーブルと、select分から、ER図を作ってほしい 0516NAME IS NULL2018/09/01(土) 19:59:37.04ID:??? select 抽出テーブル1.氏名, 抽出テーブル1.エラー内容 as エラー内容1, (select エラー内容 from 抽出テーブル as 抽出テーブル2 where 抽出テーブル2.氏名=抽出テーブル1.氏名 and 抽出テーブル2.エラー回数=2) as エラー内容2, (select エラー内容 from 抽出テーブル as 抽出テーブル3 where 抽出テーブル3.氏名=抽出テーブル1.氏名 and 抽出テーブル3.エラー回数=3) as エラー内容3 from 抽出テーブル as 抽出テーブル1 where 抽出テーブル1.エラー回数=1 order by 抽出テーブル1.氏名;
access2016のSQLビューで動いた奴 0517NAME IS NULL2018/09/01(土) 20:00:42.02ID:??? エラー内容ってカラムが実は1つのテーブルから複数もってくるけどはしょられたら破綻するけどね 0518NAME IS NULL2018/09/01(土) 20:13:28.57ID:???>>516 これはデータ件数が多いと時間かかりそう レコード1件ごとカラムのサブクエリが実行されるだろう 0519NAME IS NULL2018/09/01(土) 20:30:03.52ID:???>>518 おれもそうおもったんだよね 抽出テーブルがサブクエリだとなおさらだな
2万件っていってるのは元データが2万なのか、 氏名で出力する行が2万件なのか(2万×最大3列=6万)なのかで結果がかわるけど、 どっちなんだろな 0520NAME IS NULL2018/09/01(土) 20:58:07.07ID:???>>516 ありがとうございます。今一番早く出来たのがその形で、それで1時間掛かっています。
30万件から抜くクエリは1分程度なので、×3でいけると思っていたら1時間掛かるようになってしまい。 0521NAME IS NULL2018/09/01(土) 22:02:50.69ID:???>>520 問題を切り分けたほうがいい気がしてきたけど、 @単純にデータを取得する場合の実行速度 select 氏名,エラー回数,エラー内容 from 抽出テーブル order by 氏名,エラー回数 Aエラー回数を列別に変換する場合の実行速度(>>510)を参考 select 氏名, Max(IIf(エラー回数=1,エラー内容,Null)) as エラー内容1, Max(IIf(エラー回数=2,エラー内容,Null)) as エラー内容2, Max(IIf(エラー回数=3,エラー内容,Null)) as エラー内容3 from 抽出テーブル group by 氏名 order by 氏名 これはどのくらいの実行時間なわけ?※Openして何もせずにループだけする 0522NAME IS NULL2018/09/01(土) 22:05:12.33ID:4FUN7IZm いまなんの話題?3行で 0523NAME IS NULL2018/09/01(土) 22:53:54.26ID:??? s q l 0524NAME IS NULL2018/09/01(土) 23:00:11.61ID:???>>521 状況をきちんと伝えられていなくて申し訳ないです。