X



トップページDB@2ch掲示板
1002コメント330KB
SQL質疑応答スレ 17問目 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001NAME IS NULL
垢版 |
2016/07/10(日) 22:29:01.40ID:???
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。

SQLという言語はISOによって標準化されていますが
この標準を100%実装したDBMSは存在せず、
また、DBMSによっては標準でない独自の構文が
追加されていることもあります。

質問するときはDBMS名を必ず付記してください。

【質問テンプレ】
・DBMS名とバージョン
・テーブルデータ
・欲しい結果
・説明

前スレ:
SQL質疑応答スレ 16問目
http://echo.2ch.net/test/read.cgi/db/1447160858/
0384NAME IS NULL
垢版 |
2017/07/26(水) 22:55:56.85ID:???
>>383
ありがとうございます
join したほうがいいのかな
これを参考にしてやってみます。
0385NAME IS NULL
垢版 |
2017/07/27(木) 11:16:31.96ID:???
>>384
データ量はたぶんたかだか数万レコード程度だろうから、どんなやり方でもパフォーマンス的には気にする必要ないと思うよ
0386NAME IS NULL
垢版 |
2017/07/27(木) 21:34:59.28ID:???
>>383
横からだが、fromとwhereで結合しても、joinで結合しても
書き方が違うだけで同じだぞ

パフォーマンス気にするなら、使ってるDBMSの実行計画読めるようにならないと
事前に結合した実データ(のテーブルやビュー)用意するんじゃなければ
SQLの書き方では差がでないのが原則
0387NAME IS NULL
垢版 |
2017/07/27(木) 22:17:49.93ID:Wb6w4MLZ
じじいが嘘を広めていることもあるから混乱するんだよな。
0388NAME IS NULL
垢版 |
2017/07/27(木) 22:31:45.92ID:???
tableAのデータがあった場合、tableBの結果と、tableCのビューが欲しいです。
tableAの補習が入った場合は学校にいくまでの間はすべて補習の時間になります。
まったく書き方が見当がつかないのでアドバイスお願いします

tableA
時間、学校、部活、補習

2017/6/1 06:00:00、NULL、OK、NULL
2017/6/1 07:00:00、NULL、OKL、NULL
2017/6/1 08:00:00、OK、NULL、NULL
2017/6/1 09:00:00、OK、NULL、NULL
2017/6/1 10:00:00、OK、NULL、NULL
2017/6/1 11:00:00、OK、NULL、NULL
2017/6/1 12:00:00、OK、NULL、NULL
2017/6/1 13:00:00、NULL、OK、OK
2017/6/1 14:00:00、NULL、OK、NULL
2017/6/1 15:00:00、NULL、OK、NULL
2017/6/1 16:00:00、OK、OK、NULL
2017/6/1 17:00:00、OK、NULL、NULL
2017/6/1 18:00:00、NULL、OK、NULL
2017/6/1 19:00:00、NULL、OK、NULL
2017/6/1 20:00:00、NULL、OK、NULL
2017/6/1 21:00:00、NULL、OK、NULL

tableB
時間、活動

2時間、部活
5時間、学校
3時間、補習
2時間、学校
4時間、部活

tableC
時間、活動

7時間、学校
6時間、部活
3時間、補習
0389NAME IS NULL
垢版 |
2017/07/27(木) 22:40:11.70ID:???
他人にわかる説明ができるようになったら解決するんじゃないかな。
0390NAME IS NULL
垢版 |
2017/07/27(木) 22:56:18.00ID:???
>>388
tableBとtableCはビューB,、ビューCをだしたいに訂正します。
ビューCはビューBの部活、学校、補習の合計時間をだします。

tableA は1時間間隔で 活動した予定にOKが付きます

6時と7時は部活をやっているので2時間になります。
そのあと学校が5時間

その次は部活と補習がOKになっていますが
補習がOKなったら、学校がOKになるまで補習の時間なので
補習が2時間になります。

この流れで↓の結果が欲しいです。

ビューB
時間、活動

2時間、部活
5時間、学校
3時間、補習
2時間、学校
4時間、部活

ビューC

7時間、学校
6時間、部活
3時間、補習


SQLだけで書くのは見当がつかないのでアドバイスお願いします。
0391NAME IS NULL
垢版 |
2017/07/27(木) 23:04:51.56ID:???
SQLだけで書けないと思ったのにSQLスレなのか
DBだけでやれない想定として、どういう風に実装予定なの?
ざっくりでいいからさ(Java使って、とかWindows上でとか)
0392NAME IS NULL
垢版 |
2017/07/27(木) 23:33:31.06ID:???
SQLだけでできるかわからないので質問しました。
今回のような内容はSQLでやるべきではない?SQLでできてもものすごくめんどくさい?
の状態です。似たような内容を何件か取得したいと思っているのでしりたいです。

SQLだけでビューB、ビューCをだせるなら、Windows上のアプリ でそれを取得してCSVデータにするのが簡単だと思っています。

SQLだけで無理ならtableAのデータからCSVデータを作成のつもりです。
0393NAME IS NULL
垢版 |
2017/07/27(木) 23:42:29.20ID:???
ビューとして取る必要があるの?
画面に表示したいとか?
取得したデータをそうしたいの?
0394NAME IS NULL
垢版 |
2017/07/27(木) 23:50:08.71ID:???
ビューとして取れるようにしておけばそのままCSVにだすだけで簡単なのと、
画面に表示したいと思っています。
取得したデータの操作は考えていません。
0395NAME IS NULL
垢版 |
2017/07/27(木) 23:50:42.81ID:???
データが絶対に1時間間隔で抜けはないってならSQLだけでできるんじゃね

俺ならBはtableA を時間でソートして、ホストアプリでブレークチェックしながらカウントして表示するけどな
0396NAME IS NULL
垢版 |
2017/07/28(金) 00:01:52.52ID:???
>>388
は1時間間隔でなっていますが
秒単位で間隔は一定ではないです。
すみません。

Windows上のアプリはあまり動作増やしたくないなと思っていたんですが
SQLだけでやろうとすると
大変?って感じなのかな
0397NAME IS NULL
垢版 |
2017/07/28(金) 08:06:19.46ID:???
普通データベースの動作を増やさないように工夫すべきなんだけどな
0398NAME IS NULL
垢版 |
2017/07/28(金) 08:09:22.13ID:???
> は1時間間隔でなっていますが
> 秒単位で間隔は一定ではないです。
意味不明だし後出しフラグ立ってるしすまんが抜けさせてもらうわ
0399NAME IS NULL
垢版 |
2017/07/28(金) 09:06:32.50ID:???
最初からずーっと意味不明だったな
0400NAME IS NULL
垢版 |
2017/07/28(金) 11:05:37.51ID:IsxTOLxk
>>396
初心者か?SQLは呪文ではない。
0401NAME IS NULL
垢版 |
2017/07/28(金) 11:06:54.25ID:IsxTOLxk
ロジックを隠蔽すると軽くなる理屈が不明
0402sage
垢版 |
2017/07/28(金) 13:06:18.42ID:UiVRAQM3
mdbファイルをDSNで一般に公開する方法を教えてください。
perl公開ならiisを使えばよいことは分かります。
pdf公開ならftpサーバを使えばよいことは分かります。
mdbファイルはiisを使って公開できるのでしょうか?
iisには接続文字列の設定がありますが意味が分かりませんでした。
odbcad32.exeはネットワーク越しは無理みたいでしたし。
ACCESSというお高いソフトにはmdbファイルを公開できる
サーバ機能が含まれているのでしょうか?
0403NAME IS NULL
垢版 |
2017/07/28(金) 13:09:57.81ID:???
>>402
データベース(ファイル)を一般公開してはいけません
0404NAME IS NULL
垢版 |
2017/07/28(金) 17:22:29.53ID:IsxTOLxk
公開って何?
0405NAME IS NULL
垢版 |
2017/07/28(金) 17:34:26.21ID:???
mdbはファイル共有型だから
そのmdbファイルをファイル共有できるようにすればOK

とレスしてみたけど
そのレベルで一般に公開するのはやめとけ
0406NAME IS NULL
垢版 |
2017/07/28(金) 18:01:40.86ID:IsxTOLxk
答えてる方も何をいってんのかw
0407NAME IS NULL
垢版 |
2017/07/28(金) 19:15:12.26ID:???
共有はいいけど公開はダメってだけでしょ
0408NAME IS NULL
垢版 |
2017/07/28(金) 21:58:07.64ID:???
さすがにイントラでってことなんだろうけど、それでも公開はまずいっしょ
0409NAME IS NULL
垢版 |
2017/07/28(金) 22:35:23.73ID:UiVRAQM3
漏れをそのレベルとしか見れない人よりはレベル高いと思ってる。
ここまで6件のレスがついたが誰人答えを知らないほどレベルの高い質問をしてしまった。
漏れよりレベルの高い人を待つ。
合計7人が回答をお待ちしています。
0410NAME IS NULL
垢版 |
2017/07/29(土) 00:45:43.29ID:???
>>409
とりあえず2chで質問とかアホなことしてる時点で低レベルやぞ?
0411NAME IS NULL
垢版 |
2017/07/29(土) 01:12:28.22ID:HlUqV4Yy
分かっておる。しかしそんな漏れよりももっとレベルの低い人が見つかった気がして
ちょっとうれしくなった。
あんたも答える知識の無い低レベルだな。
FileMaker入れて漏れは今解決したよ。
7人の戦士のうち結果的に漏れが一番レベルが上になったようだ。
ばいばい。
0412NAME IS NULL
垢版 |
2017/07/29(土) 01:45:14.92ID:???
低いレベルというか専門性が違うだけでしょ
SQLスレで聞くのも違う気がするし
0413NAME IS NULL
垢版 |
2017/07/29(土) 01:51:03.66ID:???
聞けるスレがないと言うのも気の毒だったけど
しかし、もっと違うアプローチをすべきだとは思った
0414NAME IS NULL
垢版 |
2017/07/29(土) 02:02:41.39ID:???
MDBファイルはADOを使ってPHPからアクセス出来るので
IIS上で上手くやればWebサイトとして構築出来るんじゃないかな?
0415NAME IS NULL
垢版 |
2017/07/29(土) 05:31:07.27ID:wCmqTHAL
彼はデータのを表示させるためなら、どんな方法でもよいとしか言ってないぞ?
0416NAME IS NULL
垢版 |
2017/07/29(土) 05:37:16.37ID:wCmqTHAL
FTPでファイル転送してるらしいから、mdbファイルを渡せばいいんじゃないのか?
0417NAME IS NULL
垢版 |
2017/07/29(土) 12:18:07.93ID:???
初心者てレベル争い好きだなw
0418NAME IS NULL
垢版 |
2017/07/30(日) 00:15:18.39ID:???
>>414
Webサイト構築したいとか言う話じゃないし、それが出来るレベルの人間の質問でもないけど

>>415
彼って誰だよ
表示出来ればどんな方法でもいいとか誰がいってるの?

mdbをDSNで直接指定できるようにするにはファイル共有でアクセスできるようにすればいい
それを一般に公開するかどうはやる奴が決めればいい
0419NAME IS NULL
垢版 |
2017/07/30(日) 00:24:21.99ID:???
>>418
でも、iisやftpの話を出してきてるし
一般に公開する方法ってことだから
内容を表示出来れば要件は満たしそう
0420NAME IS NULL
垢版 |
2017/07/30(日) 16:59:29.66ID:J2rDve9a
>>402 は何を公開するとも言ってない。

Perlのスクリプトを公開するのもコードを公開するとも受け取れる。

PDFファイルはなぜかFTPでダウンロードさせてるあたりから、助言する段階の情報がまだない。
0421NAME IS NULL
垢版 |
2017/07/30(日) 17:45:16.01ID:???
PostgreSQLでいうと、port 5432をインターネットに公開したいってことでしょ
0422NAME IS NULL
垢版 |
2017/07/30(日) 22:13:58.56ID:???
>>420
>mdbファイルをDSNで一般に公開する方法を教えてください
って言ってるけど?
0424NAME IS NULL
垢版 |
2017/07/31(月) 00:05:16.94ID:???
ここのスレは>>411にとって
>漏れよりももっとレベルの低い人
の集まりで
>答える知識の無い低レベル
らしいから、そんなのこちらが考えるだけ無駄
0425NAME IS NULL
垢版 |
2017/07/31(月) 04:43:26.66ID:lcWS9MWM
WebブラウザでAccessの画面を開きたいレベルの話だと思うけどな。

PDFファイルをローカルで開いていることもわからないくらいだから。
0426NAME IS NULL
垢版 |
2017/08/03(木) 21:28:57.05ID:UD0thFWN
すいません質問です
記事テーブルとカテゴリテーブルがあるのですがそれぞれのID部分を post_id category_id とするのか、単に id とするのかどちらがいいでしょうか?
0427NAME IS NULL
垢版 |
2017/08/03(木) 23:04:48.93ID:???
ネーミングの問題?自分で作ってるものなんだろうけど、3ヶ月後の自分は他人なんだから、そんなしょーもないところで
手を抜かずにちゃんとした名前、この場合ならpost_ , category_ 等々にしたら?
0428NAME IS NULL
垢版 |
2017/08/03(木) 23:11:37.36ID:WNAOpieS
>>426
そのIDが同じものでないなら、ただのIDという名前はやってはいけないレベルの命名。
0429NAME IS NULL
垢版 |
2017/08/03(木) 23:15:52.36ID:???
作った当初は覚えているだろうけど
何年か経ってSQLソースを見た時に

「このidってなんだったっけ?」

てことになる
0430NAME IS NULL
垢版 |
2017/08/03(木) 23:41:59.58ID:WNAOpieS
0432NAME IS NULL
垢版 |
2017/08/04(金) 00:16:01.81ID:???
普通にidでええやろ
category.category_idとかアホみたいやん
0434NAME IS NULL
垢版 |
2017/08/04(金) 00:27:50.41ID:???
デフォルトは主キーがIDのフレームワークもある時代に何言ってんだか
0435NAME IS NULL
垢版 |
2017/08/04(金) 00:40:24.77ID:lQ2EAqCJ
>>434
データベースに詳しくないのが無茶苦茶なことをやるんだよな。
0436NAME IS NULL
垢版 |
2017/08/04(金) 00:41:55.38ID:lQ2EAqCJ
ナチュラルジョインも知らないのが設計するとそうなる。
0437426
垢版 |
2017/08/04(金) 01:06:51.92ID:ps9NmLsK
皆様ありがとうございますm(_ _)m
idは他のテーブルでも使用されるので post_id などに統一しようと思います
0438NAME IS NULL
垢版 |
2017/08/04(金) 14:36:14.96ID:???
どんなテーブルだろうが id は id やろ?
テーブル見ればなんの id か分かるだろ?
アホはアホなとこに神経使うんだな(笑)
0439NAME IS NULL
垢版 |
2017/08/04(金) 16:26:24.86ID:???
maker.code (PK)
product.code (PK)
設計はともかくこういう命名規則も許せないのか、気になるところね
0440NAME IS NULL
垢版 |
2017/08/04(金) 16:39:09.84ID:???
id列にも名前に修飾詞をつけておくとusing句が使いやすいというメリットがあるんやで
なんでも原理原則に従うのがいつも最良の方法とは限らんのや
0441NAME IS NULL
垢版 |
2017/08/04(金) 16:53:10.36ID:???
テーブル以外のidも意識しろって話でしょ
全部idだとどこの何のidか意識する必要あるし、外部キーとしてidが多々あるとNGだね
0442NAME IS NULL
垢版 |
2017/08/04(金) 17:25:24.36ID:???
テーブル名指定したらいいだけやん
0444NAME IS NULL
垢版 |
2017/08/04(金) 18:30:50.02ID:sgWQZKSP
ナチュラルジョインも知らないのが設計するとそうなる。
0445NAME IS NULL
垢版 |
2017/08/04(金) 18:43:29.71ID:???
>>444
最近覚えた言葉を使いたがるやつっているよね
0446NAME IS NULL
垢版 |
2017/08/04(金) 18:48:16.83ID:sgWQZKSP
同じカラム名で意味の異なる属性は、RDBではないな。そのテーブルの主キーではあるが、業務上、意味がない値を格納するだけだとしてもよろしくない。MS-Accessの古い慣習の影響か。
0447NAME IS NULL
垢版 |
2017/08/04(金) 19:00:50.99ID:???
あのさぁ、1プロジェクトで数百以上のテーブルとか普通にあるんだけど、それぞれユニークなカラム名付けるのか?
0449NAME IS NULL
垢版 |
2017/08/04(金) 19:07:45.32ID:sgWQZKSP
カラム名が同じなら、その項目同士にリレーションシップがあると考えるのが標準SQL。
0450NAME IS NULL
垢版 |
2017/08/04(金) 19:42:37.61ID:???
>>449
はっ?
そんな仕様にはなっていない
0451NAME IS NULL
垢版 |
2017/08/04(金) 19:47:30.11ID:lQ2EAqCJ
>>450
リレーションシップは外部キー制約があるかどうかではない。
0454NAME IS NULL
垢版 |
2017/08/04(金) 20:20:01.75ID:lQ2EAqCJ
関係リレーショナルデータベース
0455NAME IS NULL
垢版 |
2017/08/04(金) 20:20:50.75ID:lQ2EAqCJ
関係データベース
0456NAME IS NULL
垢版 |
2017/08/04(金) 21:08:11.33ID:???
>>442
て言うか単一テーブルだけでないなら普通そうするよね
0457NAME IS NULL
垢版 |
2017/08/04(金) 21:42:18.25ID:???
テーブル名指定するなら、テーブル名をコラム名の一部に使うのと同じ事になる
0458NAME IS NULL
垢版 |
2017/08/04(金) 23:18:24.74ID:???
考え方の違いだな。
テーブルはエンティティを表すとするならカラムはその固有の属性だが、もともとのリレーショナルモデルでは
先に属性があってその関係をリレーション(テーブル)として表すわけなんで、同じ属性が異なる複数の
リレーションに含まれ得る。
0460NAME IS NULL
垢版 |
2017/08/05(土) 01:35:30.52ID:???
すみません、SQLの実行の順番ってどうなってるのですか?

select
hoge
from
tableA
inner join (...) subQuery1
on(...)
inner join (...) subQuery2
on(...)
みたいなsqlがあるとき、どのどこから実行されるのですか?
0461NAME IS NULL
垢版 |
2017/08/05(土) 06:36:08.94ID:MeRXBAvD
>>460
質問がおかしい
0462NAME IS NULL
垢版 |
2017/08/05(土) 07:34:03.19ID:???
from→where→group by→having→select→union等→order by
の順に実行したかのような結果になる(from内のjoinは左から)
内部動作として実際にこの順で実行しているかはまた別の話
0463NAME IS NULL
垢版 |
2017/08/05(土) 07:42:50.82ID:MeRXBAvD
>>462
そういう説明はやめた方がいい。
0464NAME IS NULL
垢版 |
2017/08/05(土) 08:14:28.45ID:???
いや、必要な知識だと思うが。
0465NAME IS NULL
垢版 |
2017/08/05(土) 08:51:33.75ID:MeRXBAvD
>>464
彼の質問はインランビューだと思う。
0466NAME IS NULL
垢版 |
2017/08/05(土) 09:21:04.88ID:???
サブクエリもfrom句の内なんだからそのように解釈すればいいだろう。そもそも何を問題にしているのかわからん。

>>460の質問はおかしい
>>460の質問はインラインビューについて聞いている
>>460の質問はインラインビューについて聞いているが質問がおかしい

どれ?
0467NAME IS NULL
垢版 |
2017/08/05(土) 09:30:25.17ID:MeRXBAvD
>>466
初心者なんだから、そんなのあたりまえだということがわからない。

話をすっとばしてはいけない。
0468NAME IS NULL
垢版 |
2017/08/05(土) 09:55:24.27ID:???
その「あたりまえ」は>>462の知識を前提にしているんだから順序はそれでいいんだよ。何をすっとばしたって?
それにそもそも、>>460がそのあたりまえのことを理解できない初心者だと決めつけるのもおかしいだろう。

一連のレスを見返してみると、お前は中身のないケチをつけるしか能がないのか?しかも支離滅裂。
0470465
垢版 |
2017/08/05(土) 11:06:11.75ID:???
すみません。SQL初心者なのにここで質問してしまいました。
知りたかったことは下記のようなことです。

subQuery1,2はTableAを別名化したものです。subQuery内にはそれぞれwhere条件があります。

subQuery1内のwhere句のregist_dateが2017/08/04between2017/08/05

subQuery2内のwhere句のregist_dateが2000/01/01between2017/08/05


このとき、subQuery2内のwhere句には、2017/08/04~2017/08/05のフィルタがかかった状態で検索されるのですか?
それともフィルタがかからない状態で検索され、2000/01/01~2017/08/05までの全レコードが検索され、
その上で内部結合の結合条件のレコードが抽出されるのですか?
0471NAME IS NULL
垢版 |
2017/08/05(土) 11:48:15.87ID:???
概念的には各サブクエリは独立して実行されると考えてよいが、
それをjoinした結果からは区別がつかん場合もある。
もちろん実際の実行順序は別の話。
0472NAME IS NULL
垢版 |
2017/08/05(土) 14:00:31.63ID:MeRXBAvD
>>470
同じSELECT文の中で同じテーブルを検索したら、それはそれで結果のビューができるという考え方でよい。

RDBMSによって内部の実装は異なるし、データの統計情報によっても処理方法は異なる。
0473NAME IS NULL
垢版 |
2017/08/05(土) 14:05:36.05ID:MeRXBAvD
>>470
内部結合だから結合条件によっては、同じ結果になるか、初心者にありがちな検索結果からSQLが正しいかどうかを確認してるのか?
0474NAME IS NULL
垢版 |
2017/08/06(日) 11:03:43.07ID:???
日本語下手な奴は迷惑
0475NAME IS NULL
垢版 |
2017/08/06(日) 11:09:38.00ID:???
外国人に日本語を下手なのを納得です
0476NAME IS NULL
垢版 |
2017/08/10(木) 17:31:03.03ID:???
SQL初心者のスレが無いorz
mysqlですがちょっと教えて下さい
table nulltest
id int primary key,
price1 int not null,
a__price1 int default null
というテーブルで

a_price1がnullでないならそれを採用、
a_price1がnullならprice1を採用
id price1 a_price1
1 , 10 , 8
3 , 122 , 100
10 , 10 , null
とあるなら
1 , 8
3 ,100
10, 10
と出したい。SQLで出来ませんか?
0477NAME IS NULL
垢版 |
2017/08/10(木) 20:25:08.56ID:???
インジェクション扱いされて
SQL文、書き込めない。
0478NAME IS NULL
垢版 |
2017/08/10(木) 20:27:07.56ID:???
>a_price1がnullでないならそれを採用、
>a_price1がnullならprice1を採用

coalesce(a__price1,price1) as a_price1

全角を半角に直して
0479NAME IS NULL
垢版 |
2017/08/10(木) 20:45:02.52ID:???
>>478

その引数を最初から評価して最初にNULL値でない引数を返す

ということで最初にa__price1を持ってくるということですか。
ありがとうございます
0480NAME IS NULL
垢版 |
2017/08/11(金) 10:43:48.97ID:b98NF32s
>>479
彼は関数を使えと言ってるけど、CASE式でもいいけどな。
0481NAME IS NULL
垢版 |
2017/08/11(金) 23:37:00.76ID:???
476です。あ〜、case式ですか

case when a_price1 is null then price1 else
a_price1 end as a_price1
でも出来ました。ありがとうございます。
0482NAME IS NULL
垢版 |
2017/08/19(土) 02:13:10.41ID:???
IDEなんかに出てくるフォルダがスキーマってやつだよね?
でテーブルがあると
スキーマとテーブルの間のフォルダみたいな奴はなんなの?
0483NAME IS NULL
垢版 |
2017/08/22(火) 12:29:00.59ID:???
スキーマとテーブルの間のやつだろ論理的に考えて
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況