X



トップページDB@2ch掲示板
1002コメント319KB
SQL質疑応答スレ 18問目
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001NAME IS NULL
垢版 |
2018/01/04(木) 22:12:22.14ID:???
このスレは
「こういうことをやりたいんだけどSQLでどう書くの?」
「こういうSQLを書いたんだけどうまく動きません><」
などの質問を受け付けるスレです。

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

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

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

前スレ:
SQL質疑応答スレ 17問目
https://mevius.5ch.net/test/read.cgi/db/1468157341/
0851NAME IS NULL
垢版 |
2019/04/07(日) 14:49:06.95ID:???
select
No1
,decode(No2,A,1,0)+decode(No3,A,1,0)+…+decode(No8,A,1,0) As Acnt
,decode(No2,B,1,0)+decode(No3,B,1,0)+…+decode(No8,B,1,0) As Bcnt
,decode(No2,C,1,0)+decode(No3,C1,0)+…+decode(No8,C,1,0) As Ccnt
from テーブル
0852NAME IS NULL
垢版 |
2019/04/07(日) 19:59:58.82ID:XK0411W4
20年前のPCの感覚で考えているんだろうな。しかも巨大Excel風がお好みらしいから無視が一番。
0853NAME IS NULL
垢版 |
2019/04/07(日) 20:08:22.18ID:???
糞メーカー製品のせいでテーブル変えられないって訳でもなく、自分でそういう設計にしてるならしょうがないね
0854NAME IS NULL
垢版 |
2019/04/07(日) 20:31:56.17ID:???
decodeとかOracleしか使えないのよりcase when
で記述していったほうがよくね
0855NAME IS NULL
垢版 |
2019/04/07(日) 21:47:20.06ID:mpDpVIK/
いじめはどこの町にもあるが島本町は特に酷い
「大阪府三島郡島本町のいじめはいじめられた本人が悪い 」なんて
公言する町は他に無い
0856NAME IS NULL
垢版 |
2019/04/07(日) 22:22:31.97ID:???
Oracle 12 なら VARRAY とかでもいいかも
ただ操作する関数は貧弱なのでストアド必須になると思うが
0857NAME IS NULL
垢版 |
2019/04/07(日) 23:49:47.59ID:+nydsyOL
>>856
知識がないのになんで無理やり書き込むの?
0858NAME IS NULL
垢版 |
2019/04/08(月) 02:31:15.60ID:n+bY9Kjk
Postgres11を使用しています。

3700万行程のテーブルの中途半端な位置に行を追加したいのですが、
通し番号の昇順を維持するにはどうすればよいでしょうか?

こんな構造です。
----------------------------------
主キー | 本文(最大3MB程度)) | 通し番号
----------------------------------

今はこうなっているとします。
--------------------
0001 | あいうえお | 0001
0003 | さしすせそ | 0002
0004 | たちつてと | 0003
--------------------

ここに、1行追加して、以下のように変更したいです。
--------------------
0001 | あいうえお | 0001
0002 | かきくけこ | 0002
0003 | さしすせそ | 0003
0004 | たちつてと | 0004
--------------------
0859NAME IS NULL
垢版 |
2019/04/08(月) 03:17:37.68ID:???
>>858
この穴埋め問題はよく話題になるんだけど、やりたいなら最初からそう設計して採番しないとキレイにできないんだよ。後からやるならアプリ側で調整したほうがうまくいく。主キーならとくに。
0860NAME IS NULL
垢版 |
2019/04/08(月) 03:24:20.28ID:kcf+7C4K
>>858
UPDATE テーブル
SET 通し番号=通し番号+1
WHERE 通し番号 > 2
とかではなくて?
0861NAME IS NULL
垢版 |
2019/04/08(月) 05:05:10.99ID:???
>>858
update テーブル t1
set 通し番号 = (select Rank
from (select 主キー,
Row_Number() over(order by 主キー) as Rank
from テーブル) t2
where t1.主キー = t2.主キー);
0863NAME IS NULL
垢版 |
2019/04/08(月) 22:21:43.69ID:???
主キーには空きがある前提なのか?
その例だと通し番号要らんように見えるぞ
0864NAME IS NULL
垢版 |
2019/04/16(火) 07:28:34.74ID:???
超初心者の質問で申し訳ないですが

SQLで
顧客情報、順路表から計算して
申請書を作る
医療関係のデータベースは作れますか?
0865NAME IS NULL
垢版 |
2019/04/16(火) 07:47:16.31ID:???
>>864
要件が不足しています
計算とは?

2つ表から単に申請書に必要なデータを抜いてくるだけなら当然つくれます
0866NAME IS NULL
垢版 |
2019/04/16(火) 12:29:02.43ID:???
>>865
すいません

もう少し詳しく書くと

■顧客情報
A受けている治療内容 (〇〇円)
■順路表
B患者を何回いった(〇〇回)
C前の患者との距離(〇〇km)
■申請書
A、B、Cの数字を元に
四則計算して
それぞれの箇所に数字を入力
して申請書を作成
できるデータベースです
0867NAME IS NULL
垢版 |
2019/04/16(火) 12:29:36.88ID:???
>>865
あと
順路表を前月と同じ内容を
翌月にコピーできますか?

※4/1(月曜) Z→E→F
4/2(火曜) L→E→M
なら
5/6(月曜)) Z→E→F
5/7(火曜)L→E→M
0868NAME IS NULL
垢版 |
2019/04/16(火) 12:30:58.01ID:???
>>865
現在はEXCELでやっていて
重すぎるので何か手はないか
と考えているところです
0869NAME IS NULL
垢版 |
2019/04/16(火) 14:26:35.70ID:???
SQLでできるかというより
これは医療向けアプリじゃないの?
ACCESSで作れますかという話かね
索引とか使えば検索を早くできるからたぶんマシにはなるしデータの複製もできる

発想を跳躍させて
Z、E、Fとか未定義で最短経路問題なのかすら怪しいけど
経路ならグラフデータベースとかある
0870NAME IS NULL
垢版 |
2019/04/16(火) 22:05:17.16ID:???
>>869
返信ありがとうございます

Eさんの4月分の申請書を作成するときは
4/1はZ→Eの最短距離
4/2はL→Eの最短距離
で計算します

※Excelでは最短距離だけのシートがあり
Z→Eとすると4/1は最短距離だけのシート
から情報を抜き出しZ→Eの最短距離で計算します

Accessで作れますか?
調べたら
Excelと同じOfficeですし
SQLもあるそうですね
それと
検索機能とかでスピードアップ期待
データの複製はしやすそうですね
0871NAME IS NULL
垢版 |
2019/04/18(木) 12:50:12.86ID:???
現状のスタイルを頑なに守るよりも、市販のパッケージに業務形態を合わせたほうが幸せになれると思う。
0872NAME IS NULL
垢版 |
2019/04/19(金) 03:51:41.96ID:YxPtsFlc
SELECT key, 名前, 住所, 電話番号
FROM usertable
WHERE (key = (SELECT MAX(key) AS EXPR1 FROM usertable usertable_1))

このSQLは何をしているのでしょうか?
特に、EXPR1が分からないのと、FROM後に、DBには存在しないusertable_1というテーブルが指定されているのが理解出来ません。
0873NAME IS NULL
垢版 |
2019/04/19(金) 05:43:22.57ID:???
>>872
EXPR1はMAX(key)の項目名、
usertable_1はusertableの一時的な名前
と名前を付けているだけです

このSQLの場合は特に名前を付ける意味はありません
0874NAME IS NULL
垢版 |
2019/04/19(金) 12:05:23.81ID:9Q8CShQD
>>872
無駄なテーブル別名、カラム別名があり、さらに無駄な括弧がある。

こうなった経緯は読み取れない。
0875NAME IS NULL
垢版 |
2019/04/19(金) 12:29:57.43ID:???
項目別名はけっこうasつけるひと多いな
テーブル別名にはみんなつけないけど
0876NAME IS NULL
垢版 |
2019/04/19(金) 12:30:53.73ID:???
テーブル別名にAsあったっけ?
0877NAME IS NULL
垢版 |
2019/04/19(金) 12:40:53.05ID:???
>>871
ならない
他業界しかやってないやつに
現場の気持ちはわからない

どんなソフトよりも
自分のExcelが一番
今後さらに良くするための質問
0878NAME IS NULL
垢版 |
2019/04/19(金) 19:23:24.52ID:???
SQL標準では昔から列別名もテーブル別名もASをつけて良いのだが
なぜかOracleでは昔からテーブル別名にASをつけられない
0879NAME IS NULL
垢版 |
2019/04/20(土) 00:53:28.87ID:5u+C7Ddr
>>878
それは誤り。Oracle Databaseでは特定のバージョンだけASを使用できないものがあった。
0881NAME IS NULL
垢版 |
2019/04/22(月) 16:40:13.06ID:???
ExcelのクエリはASで別名付けても無視するのが残念
0882NAME IS NULL
垢版 |
2019/04/22(月) 16:48:58.86ID:HR8wVegr
>>881
ExcelのSQL操作はおまけ機能みたいだからなあ。特定の文字が使えなかったりとタチが悪い。
0883881
垢版 |
2019/04/25(木) 16:05:43.06ID:???
すまん。現行バージョンでは反映されてた。
0884NAME IS NULL
垢版 |
2019/04/27(土) 16:07:30.36ID:Nn9s9qmX
>>883
現行バージョンとは何?
0885NAME IS NULL
垢版 |
2019/04/27(土) 16:08:45.89ID:???
ORACLEの現行つったら18c
0886NAME IS NULL
垢版 |
2019/04/27(土) 16:44:04.96ID:???
Excelの話じゃないのか?
0887NAME IS NULL
垢版 |
2019/04/27(土) 16:48:39.97ID:???
国語の勉強しましょう
0888NAME IS NULL
垢版 |
2019/04/27(土) 19:08:41.10ID:???
そもそもデータベースが何かを理解してないな
表計算ソフトとは別物
計算や出力が必要ならプログラム書く必要がある
0889NAME IS NULL
垢版 |
2019/05/01(水) 12:23:44.69ID:???
ウェブのニュースを集めてとにかくデータベースに放り込み必要なものを取り出すことをしていたのですが
先日からこのようなエラーが出てデータを取り出した結果が取れなくなりました
データが取れることもありますがたまにうまく行くといった感じです

エラー:[MySQL][ODBC 5.3(w) Driver][mysqld-5.7.16]Query execution was interrupted, maximum statement execution time exceeded
コード:80004005
ソース:Microsoft OLE DB Provider for ODBC Drivers

データベースのサイズは2GBくらいあります。設定等々は変えていません
SQLサーバーのエラーログにエラーは見当たらずいろいろやりましたが困っています
解決方法を教えてください
0890889
垢版 |
2019/05/01(水) 12:28:19.61ID:d1NFaXkw
クエリを飛ばして30秒ほどでエラーが返ってきます
エラーコードで検索してnet_read_timeoutをいじったり
/*+ MAX_EXECUTION_TIME(1000) */を入れてみたのですが結果は変わりません
データベースの行数は680421です
よろしくお願いします
0891NAME IS NULL
垢版 |
2019/05/01(水) 13:18:41.91ID:???
時間かかり過ぎじゃね?
0892NAME IS NULL
垢版 |
2019/05/01(水) 14:19:22.78ID:d1NFaXkw
ありがとうございます。どうすればいいですか
クエリを変えるか、データベースの設定をいじるか調べてみましたがわかりません
0893NAME IS NULL
垢版 |
2019/05/01(水) 14:31:16.72ID:???
>>889
>エラー:[MySQL][ODBC 5.3(w) Driver][mysqld-5.7.16]Query execution was interrupted, maximum statement execution time exceeded
>SQLサーバーのエラーログにエラーは見当たらず

なに使ってるかしらんがそのDBMSのスレで聞けや
このスレタイで言ってるSQLはMySQLのことでもSQLサーバーのことでもないぜ
0895NAME IS NULL
垢版 |
2019/05/01(水) 17:02:32.49ID:???
>893
sql晒してみれば?
ココ、sqlスレだし
0896NAME IS NULL
垢版 |
2019/05/01(水) 18:29:17.59ID:???
ありがとうございます。SQLは以下です。範囲を短くしても長くしても前述のエラーが出ます
SELECT * FROM table1 where input_time BETWEEN '2019-05-01 00:00:00' AND '2019-05-01 00:10:00';
0897NAME IS NULL
垢版 |
2019/05/01(水) 21:29:38.34ID:???
データ件数はどの位?
インデックス張ってる?
0898NAME IS NULL
垢版 |
2019/05/01(水) 21:33:54.17ID:???
>>896
input_timeにインデックス張ってる?
0899NAME IS NULL
垢版 |
2019/05/01(水) 22:50:57.93ID:???
>>897
ありがとうございます!データの件数は68万です。
input_time日インデックス張ってみます
0900NAME IS NULL
垢版 |
2019/05/01(水) 23:01:11.18ID:???
60万件もあるとインデックス張らないと辛いな
0902NAME IS NULL
垢版 |
2019/05/02(木) 00:02:17.46ID:BaexBhmV
>>899
そのカラムは文字列なのか?
0904NAME IS NULL
垢版 |
2019/05/02(木) 01:00:55.56ID:BaexBhmV
>>889 これが元の話だけど、問題の切り分けが全然できてない。

「SQLサーバー」とは何?
0905NAME IS NULL
垢版 |
2019/05/02(木) 01:02:07.02ID:???
単純すぎて固有のチューニングの域だな
0907NAME IS NULL
垢版 |
2019/05/02(木) 01:18:40.54ID:???
文脈から読み取る限り、違うだろう
0908NAME IS NULL
垢版 |
2019/05/02(木) 01:40:31.43ID:???
>エラー:[MySQL][ODBC 5.3(w) Driver][mysqld-5.7.16]Query execution was interrupted, maximum statement execution time exceeded
>コード:80004005
>ソース:Microsoft OLE DB Provider for ODBC Drivers

この通りなんだろう。(Microsoft) SQL ServerではなくMySQL
それを動かしているPCを指してSQLサーバーと言ったんだと思う
0910NAME IS NULL
垢版 |
2019/05/02(木) 07:14:45.95ID:???
まあよくわかってない人がデータベースとSQLをごっちゃにしちゃうとかはありがち
>>893がちゃんとログをコピペしてる所はほめていいと思う
0911NAME IS NULL
垢版 |
2019/05/02(木) 14:21:28.68ID:???
昨日はありがとうございました。>>908はその通りです
インデックスを張ると今度は要求された名前、または序数に対応する項目がコレクションに見つかりません
のエラーが出るようになったのでインデックスをちゃんと張る所からやってみようと思います
ひとまずありがとうございました
0912NAME IS NULL
垢版 |
2019/05/07(火) 09:43:18.75ID:???
>>888
Excelからデータベースに対してSQL文を投げて、結果をワークシートに取り込むまでの機能の話だろ。
かなり初期からある機能だぞ。
0913NAME IS NULL
垢版 |
2019/05/07(火) 12:20:36.84ID:???
ガチ文盲なのか?
0915NAME IS NULL
垢版 |
2019/05/09(木) 00:47:12.61ID:nm/UmqA+
UPDATE のときのテーブル名に正規表現またはワイルドカードを使う方法を教えてください。
例えば、table_a_001〜table_a_100が合った場合に、「table_a」が含まれるテーブルだけ一括でupdateしたいです。

イメージ的にはこんな感じに
UPDATE `table_a_*` SET `type`='hoge'

宜しくおねがいします。
0917NAME IS NULL
垢版 |
2019/05/09(木) 12:31:24.79ID:???
>>915
> 例えば、table_a_001〜table_a_100が合った場合
その時点でおかしいから設計を見直せ
どうしてもしょうがない場合はテキトーなスクリプト言語でSQLを生成して流せ
0918NAME IS NULL
垢版 |
2019/05/10(金) 01:11:58.08ID:???
金と技術力がないと運用にツケがまわるよくある悪例だね
0919NAME IS NULL
垢版 |
2019/05/10(金) 01:22:33.62ID:???
テーブル名の001〜100に意味があるなら、その値を項目に追加して
全部を一つのテーブルにまとめてしまえばどうかな?
0920NAME IS NULL
垢版 |
2019/05/10(金) 02:07:24.57ID:6hPhptIK
001〜100は例えで書いたんですけど、実際は日付なんです(_20190510)みたいな
その日付ごとにけっこう大きなデータがあるので日付で分けてるんですが、SQL文だけでtable_aのみを絞るのはやっぱり無理なんでしょうか?
おっしゃるとおりで設計が間違ってるんでしょうけど
0921NAME IS NULL
垢版 |
2019/05/10(金) 03:38:04.08ID:???
日付をテーブル名にするようなデータベースで
その後に更新が必要になるって何かが変だと思う
0922NAME IS NULL
垢版 |
2019/05/10(金) 06:59:51.73ID:???
>>920
ストアドプロシージャで動的sqlでも使わない限り無理です
0923NAME IS NULL
垢版 |
2019/05/10(金) 08:16:54.30ID:???
性能的な問題でやっているんならパーティショニングが使えないか検討するところだね。
0925NAME IS NULL
垢版 |
2019/05/10(金) 11:37:38.49ID:???
量が多いからテーブルを分けるというのが、わからんな。
処理速度の問題だとしたら、インデックス付けてないとかw
0926NAME IS NULL
垢版 |
2019/05/10(金) 23:42:57.25ID:kyiAxM67
>>920
ひとつのUPDATE文で済ませたいという点からして、トランザクションの概念がないのがわかる。
0927NAME IS NULL
垢版 |
2019/05/10(金) 23:47:34.60ID:kyiAxM67
>>920
データ量が多いという認識がそのものが間違っている。

本当にデータ量が多いシステムを担当しているのなら、こんなところで質問してこない。
0928NAME IS NULL
垢版 |
2019/05/11(土) 11:49:51.10ID:???
質問者をあれこれ詮索するの、感じ悪い
提案までにしとこうよ
0929NAME IS NULL
垢版 |
2019/05/11(土) 12:26:05.61ID:???
自分からはなんの提案もなく優等生ぶるのも同類な
0930NAME IS NULL
垢版 |
2019/05/12(日) 01:08:28.68ID:DtTEN3xu
このスレッドそのものが、ずっと初心者スレになっているから仕方ない。

シェルスクリプトのスレッドでも一発コマンドでできないかと、しつこく質問してるやつがいる。

プログラマがプログラムを作っているのに、なぜかひとつの文に収めないといけない思想信条があるようだ。

こういうのは無視するしかない。
0931NAME IS NULL
垢版 |
2019/05/12(日) 20:39:12.43ID:???
ワンライナーは個人の趣味であって必ずしもソレに付き合わされる必要はないな
0932NAME IS NULL
垢版 |
2019/05/16(木) 06:37:31.47ID:R+LnK41M
PHP&MySQLの環境です。

ユーザーID
ポイント
を項目にしたテーブルがあるとします。
ユーザー間で破綻なく自由に任意のポイントを送受信するにはどのようなコードを作成すればよろしいでしょうか?

また、DBサーバが複数ある場合で、同様にDBサーバ越しでも同様のことをしようとするとどのようなコードになりますでしょうか?

秒間数千、数万の処理を行いたいです。
ご教授お願いいたします。
0933NAME IS NULL
垢版 |
2019/05/16(木) 06:46:54.10ID:???
なぜこの程度の知識しかない奴がこんな作業をさせられるのだろうか
0934NAME IS NULL
垢版 |
2019/05/16(木) 08:00:38.37ID:???
PHPしか書けないような聞き方っぽいのに
XAトランザクションで秒間数万ね
人をすり潰していたITバブル期みたいなブラックだね

http://q.hatena.ne.jp/1217036141
0935NAME IS NULL
垢版 |
2019/05/16(木) 09:48:29.80ID:???
超初心者ですすいません
likeとisと=の使い分けが分かりません
inの前はlike、nullの前はis、データ型が数字だと=であってますか?
0936NAME IS NULL
垢版 |
2019/05/16(木) 10:01:34.38ID:???
なんか1つもあってないような気がするな

"is null" と "is not null"は単語じゃなく文でワンセット
文字の比較でも =
in の前は like ... え?
0937NAME IS NULL
垢版 |
2019/05/16(木) 10:19:46.11ID:???
すいませんありがとうございます
比較の時に、=を使ったりlikeを使ったりが、使い分けがわからないのです
isが出てくるのは、isnullとisnotnullだけですか?
0939NAME IS NULL
垢版 |
2019/05/16(木) 10:52:01.67ID:???
超初心者なら、慣用句みたいに暗記した方が良いかもよ
0940NAME IS NULL
垢版 |
2019/05/16(木) 12:12:40.30ID:???
like……文字列の部分一致検索につかう
=……完全一致検索
is……null比較の構文の一部

nullの扱いはシステムによりけりなのでシステムごとに調べること
0941NAME IS NULL
垢版 |
2019/05/16(木) 13:50:42.07ID:???
なるほど、ありがとうございます
ここの方々はエンジニアですか?
自分はマーケティングの担当で自分で使えた方が便利ということで覚えようとしてます
セレクト文しか使わないのですが、色々な条件で、いつ誰が何を買ったとか抽出したく、サブクエリがうまく使えるようになるのが目標です
またアドバイスいただいてもいいですか
0942NAME IS NULL
垢版 |
2019/05/16(木) 17:34:30.51ID:???
SQLの書き方なら、ここで聞いて良いですよ

そういう質問を、みんな待ってますから
0943NAME IS NULL
垢版 |
2019/05/16(木) 20:13:56.53ID:???
SQL書かなくてもデータ分析できるツールあるからそれ使う方が良いんじゃない
0944NAME IS NULL
垢版 |
2019/05/16(木) 20:50:40.01ID:i55lMdWZ
ここにかぎらず不思議なのは5chのスレッドは探せるのに、SQLを解説しているWebサイトや、そのへんに転がっている書籍は視界に入らない人間がいるところ。
0945NAME IS NULL
垢版 |
2019/05/17(金) 07:28:38.58ID:???
>>944
> SQLを解説しているWebサイトや、そのへんに転がっている書籍
そう言うのは能動的に探さないと駄目だから
エスパー機能付きのWebサイトとか書籍があればいいんだけどw
0946NAME IS NULL
垢版 |
2019/05/17(金) 08:49:53.26ID:nkjAvs1S
BIツールは入ってますがSQL使うこともあります
いつもはデータ抽出を社内SEの人に頼んでますが、簡単なものは自分で出せた方が仕事のスピードが上がるので覚えようと思っています
本やサイトも使っていますが、どうしても途中で分からないところが出てしまって、よければ御指南ください

練習問題をやっていて、以下のような内部結合を書いたのですがデータが返ってきません
PublisherテーブルにIDとNameがあって、IDがBookテーブルのPublisher_IDとつながっています
山田さんが書いた本についてすべての情報を抜き出したいです
SELECT *
FROM Book
inner join Publisher on Book.Publisher_ID=Publisher.ID
WHERE Publisher.Name='山田';
0947NAME IS NULL
垢版 |
2019/05/17(金) 15:00:48.66ID:???
Publisher.Name って名字しか入ってないの?
0948NAME IS NULL
垢版 |
2019/05/17(金) 17:22:15.76ID:???
>>946
Publisherには'山田'ってデータがないんじゃない?
よけいなことだろうけど、
Publisherって言うと出版社のことだと思う
著者ならAuthorにしたいところ
0949NAME IS NULL
垢版 |
2019/05/17(金) 19:02:58.57ID:???
>>946
連結する場合select でアスタリスク使わない方がいい
連結側に同じフィールド名があるとエラーになるのでasで別名にしないといけない
0950NAME IS NULL
垢版 |
2019/05/17(金) 19:41:17.83ID:???
>>946
SQLは問題ないみたいだから
Publisher.Nameに山田があるか確認するために
まずそのSQLのWHERE句をはずしてどういうデータがあるかを見たほうがよいのでは?
0951NAME IS NULL
垢版 |
2019/05/17(金) 20:49:08.09ID:???
>>946
テーブル定義 (CREATE TABLE文) を見たいな
レス数が950を超えています。1000を超えると書き込みができなくなります。

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