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/
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:???
スキーマとテーブルの間のやつだろ論理的に考えて
0484NAME IS NULL
垢版 |
2017/08/22(火) 12:57:26.72ID:c5XGebwI
>>482
どのRDBMSかわからないが、GUIのツールによっては、他のユーザーのスキーマ、データベースオブジェクトがぶら下がっているかのように見えるものがある。
0485NAME IS NULL
垢版 |
2017/08/24(木) 21:53:48.44ID:???
ExcelでWith使いたいんですけど、何とかなりません?
もちろん、With〜End WithのWithじゃなくて、SQLのWithです。
0486NAME IS NULL
垢版 |
2017/08/24(木) 22:39:48.52ID:BMRgLesK
>>485
その説明では何を言ってるのかわかりません。
0488NAME IS NULL
垢版 |
2017/08/25(金) 02:54:28.48ID:???
temp table的な使い方のWITH句について言ってるんだと思うけど
DBサーバー、DBドライバ、実際のクエリ、この辺りの情報そろえて
DB製品スレかExcelスレで聞いたほうがいい
0491NAME IS NULL
垢版 |
2017/08/25(金) 20:09:29.64ID:t92cdcnK
ネット上でよく見かける困ったバカの特徴

自分が理解出来ないとすぐに相手の言語能力不足を指摘する(しかも割と本気)
0492NAME IS NULL
垢版 |
2017/08/25(金) 21:46:33.91ID:PpXsPpW0
>>491
仮定での回答ほどたいへんなものはない。
0493NAME IS NULL
垢版 |
2017/08/25(金) 22:44:29.27ID:???
>>486
>>487
いや、485にも書きましたけど、SQLのWithですって。
VBAのWith〜End WithのWithじゃないです。

>>488
そのWithです。
Excelスレって、そっちの人達じゃわからないですよ。
あと、DBサーバーとかDBドライバって、
使えるかどうかは、それに依存するんですか?
0494NAME IS NULL
垢版 |
2017/08/25(金) 22:47:33.44ID:???
WITHなら分かるけどWithは分からないにゃあ
0495NAME IS NULL
垢版 |
2017/08/25(金) 22:52:13.60ID:???
>>494
!?
SQLって小文字使えるでしょ!?
少なくともExcelなら、SelectとかFromとか、小文字使えますよ。
0497NAME IS NULL
垢版 |
2017/08/25(金) 23:44:55.40ID:???
>>485
相手のDBMSによるので最低限何のDB使ってるのか書け
接続方法等によってSQLの発行方法が微妙に違うからそれも書け
0498NAME IS NULL
垢版 |
2017/08/25(金) 23:52:02.00ID:???
自分が分かっていない事を分かっていないんだろうから何を言っても無駄
0500NAME IS NULL
垢版 |
2017/08/26(土) 00:09:13.03ID:???
ネズミをいたぶる猫を連想してしまった
0501NAME IS NULL
垢版 |
2017/08/26(土) 00:15:40.58ID:???
>>493
推測するに、ODBCかなにか使って、外部のDBを扱いたいのだろうと思う
その場合、外部のDBが何であるか、例えばOracleとかMySQLとか
そして、そのDBに対してどのような接続方法をするか、
質問する際にそういう情報として出さないと、誰も回答しようがないと思う
Withが使えるかどうかは、相手次第
0502NAME IS NULL
垢版 |
2017/08/26(土) 00:15:43.45ID:???
ネズミをいたぶる猫を見て笑ってる人がいるときいて
0503NAME IS NULL
垢版 |
2017/08/26(土) 00:34:58.63ID:???
>>493
ExcelスレってのはExcelのVBAスレな

>使えるかどうかは、それに依存するんですか?
依存する場合もあるし、君が何か間違えてる可能性もある
そもそもサーバー側がサポートしてないケースだってあるだろ
エラーが出てるならそのエラー内容も含めて関連スレで聞きな
SQLの文法でエラーになってるならここで聞けばいいけど
0504NAME IS NULL
垢版 |
2017/08/26(土) 00:39:32.94ID:???
お前らの優しさを見習いたい
0506NAME IS NULL
垢版 |
2017/08/26(土) 01:06:14.63ID:SWywwfsW
ExcelのシートにADOで繋いでクエリかけたいとかなら無理だぞ
VBA使ってるなら文字列生成を工夫して省力化できるかもしれんが。
ちなみにWITH句もしくはCTE(Common Table Expressions)といったほうが通じる
0507NAME IS NULL
垢版 |
2017/08/26(土) 12:21:03.06ID:???
>>501
完全に間違った推測ワロタw
しゃべるなバカw
0508NAME IS NULL
垢版 |
2017/08/26(土) 12:23:51.10ID:xlgNQVZl
>>507
おまえ、質問者だろ?

前もそういう態度だったよな?
0509NAME IS NULL
垢版 |
2017/08/26(土) 12:26:29.08ID:???
>>508
違うわw
質問に群がる教えたがりのバカを笑ってるだけだw
お前みたいなバカなw
0512NAME IS NULL
垢版 |
2017/08/26(土) 14:47:34.48ID:???
まあ確かにこの質問者は態度悪いな
0513NAME IS NULL
垢版 |
2017/08/26(土) 18:30:27.89ID:???
「態度」じゃなくて「頭」な
0514NAME IS NULL
垢版 |
2017/08/26(土) 19:51:42.90ID:???
>>497
>>501
相手方は、AccessかExcelかCsvです。
接続方法は、MsQueryかADOしか分かりません。

>>503
そのExcelのVBAスレなんですけど、
そっちは、普通の使い方をする人がメインで、
SQLとかWindowsAPIとか、マイナーなのはあんまり話が通じない・・。

ここも、WithがSQLのWithだとわからないで攻撃してくる人がいましたけど、
あっちはもっと酷いです。

>>506
無理なんですか・・。
ありがとうございました。
0515NAME IS NULL
垢版 |
2017/08/26(土) 20:02:14.73ID:UyefH8h9
>>512,513
お前らの頭なw
なんでバカのくせに教えたがるの?w
0516NAME IS NULL
垢版 |
2017/08/26(土) 20:08:01.94ID:fS1lbmBN
「話が通じない」んじゃなくてお前の書き方がヴァカなんだよ
0517NAME IS NULL
垢版 |
2017/08/26(土) 20:12:57.75ID:UyefH8h9
>>516←自分のバカをバカにされてバカにしてる奴が質問者だと思いこみたい救いようのないバカw
0518NAME IS NULL
垢版 |
2017/08/26(土) 20:19:19.21ID:xlgNQVZl
>>514
そもそもあなたの言葉は非常にわかりにくく、大半の日本人は理解できませんよ?
0519NAME IS NULL
垢版 |
2017/08/26(土) 20:20:33.40ID:xlgNQVZl
言い方が悪いけど、頭の悪い女性が書く文章に似ている。
0520NAME IS NULL
垢版 |
2017/08/26(土) 20:33:35.52ID:UyefH8h9
>>519
だから悪いのはお前の頭だと何度w
とはいえすかさずバカ特有の論理性を欠いた女性蔑視発言をねじこんでくるあたりはさすがだなw
バカオブザバカの称号をお前に授けようwww
0521NAME IS NULL
垢版 |
2017/08/26(土) 22:13:59.42ID:5aHU4Upa
第三者がかたわらでわめいている構図w
0522NAME IS NULL
垢版 |
2017/08/26(土) 23:00:21.75ID:???
いつものクズがVBAスレから出張してきててワロタwww
0523NAME IS NULL
垢版 |
2017/08/27(日) 08:01:00.92ID:???
>>518
それはそうです。
分かる人(Withというキーワードだけでピンと来る人)に向けて書いてますから。
0524NAME IS NULL
垢版 |
2017/08/27(日) 08:24:00.98ID:???
with自体について突っ込まれているんじゃないってことすら読み取れないのか。
ざっと見まわしても>>494ぐらいしか見当たらんけどな、そういうのは。
0525NAME IS NULL
垢版 |
2017/08/27(日) 10:06:46.09ID:QBQ1on1X
>>523
だから、どこでSQLのwith句をどう使おうとしているのか、どう書こうとしているのか、頼むから書いてくれ。
0526NAME IS NULL
垢版 |
2017/08/27(日) 11:43:26.86ID:???
そうやって甘やかすから図に乗るんだよ
0527NAME IS NULL
垢版 |
2017/08/27(日) 13:17:12.26ID:???
暇な人(分かるとは言っていない)だけが答えてますから。
0528NAME IS NULL
垢版 |
2017/08/27(日) 18:58:25.87ID:???
>>525
>相手方は、AccessかExcelかCsvです
らしいから、Jet(ACE)だろ
少なくとも俺の知るバージョンではCTEは使えないから
回答として、できないで終了でいんじゃね
0529NAME IS NULL
垢版 |
2017/08/27(日) 20:18:39.07ID:???
質問者の態度が悪いから終了済み
0530NAME IS NULL
垢版 |
2017/08/28(月) 19:51:37.55ID:???
Excel VBAスレにいるいつもの奴だからスルーで
自分で質問して自分で回答してる奴ね

お前らどうせ分からないだろ、俺が一番詳しい(キリッ
って態度で質問してる

誰かが回答するとすぐ回答者を装って嫌違うってレスしてくるからすぐわかるぜ
0532NAME IS NULL
垢版 |
2017/08/28(月) 22:52:26.60ID:XdLa3rwF
>>530
だからそのwithじゃなく雑誌のwith
0533NAME IS NULL
垢版 |
2017/08/31(木) 16:21:53.66ID:eqJ9vJSf
>>1
【緊急】
すき家の定食に衝撃異物!
ずさんな管理体制が明らかとなった
指摘したその時!わざとらしく店員が声をあげごまかした!

229 名前:やめられない名無しさん [sage] :2017/08/29(火) 07:31:54.64 ID:EfhOnUp0
俺の朝はいつもすき家
楽しみにしてたのに・・今日に限って朝定食にしたんだ

見てくれ、これが証拠
店員さんも驚いて声をあげてる・・
https://www.youtube.com/watch?v=wjD4hUeU-CA

ちなみに半分食べた
お客様センターが通じない・・病院行く・・
(´・ω・`)すき家が大好きだったのに・・
0534NAME IS NULL
垢版 |
2017/09/02(土) 17:24:26.40ID:fn9CT/Jy
LEFT JOINで結合した際に、対応するレコードがない場合
値がnullになりますが、元のテーブルのデフォルト値にするにはどうしたら良いでしょうか?
SELECT句で各clumnにIFNULLは使いたくないです
MySQLを使っています
よろしくお願いします
0535NAME IS NULL
垢版 |
2017/09/02(土) 18:09:41.53ID:???
LEFT OUTER JOINの話かな?
どっちにしろ、そんな方法はない
IFNULLで地道に埋めるしかない
0536NAME IS NULL
垢版 |
2017/09/02(土) 18:24:43.00ID:???
>>534
CASE式、COALESCE、IFNULL, サブクエリ、デフォルト値有りの一時テーブルへINSERTとかかな
IFNULLを使いたくない理由が手間のみなら諦めたほうがいい
真っ当な理由があるならCASE式での代替を考えるといいのでは
0537NAME IS NULL
垢版 |
2017/09/02(土) 18:26:33.96ID:fn9CT/Jy
>>535
>>536
そうですか・・・
clumnの数がかなりあるので糞面倒ですが地道にやります
ありがとうございました
0538NAME IS NULL
垢版 |
2017/09/02(土) 18:45:22.86ID:???
ソース全部手で打ち込んでいるのか?
環境が分からないけど、
大概のエディタって置換機能あるだろう
0539NAME IS NULL
垢版 |
2017/09/02(土) 19:42:16.80ID:???
単純な繰り返しならエクセルの計算式でsql文作ってコピペすれば楽チン
0540NAME IS NULL
垢版 |
2017/09/02(土) 19:57:29.59ID:???
すごくたくさんあるならSQLを生成するスクリプトを書くとか
0541NAME IS NULL
垢版 |
2017/09/02(土) 21:09:40.84ID:???
SELECT *, "default" AS [name] FROM foo

こんな感じでfooテーブルのレコードに任意の値をくっつけたものを出力可能
NOT EXISTSとかのサブクエリと組み合わせて、EXISTS側とUNIONで合体する
自分ならまずやらない方法ではあるが

単発のSQLじゃなくアプリケーションで使うSQLだとすると
DB設計かアプリケーション設計かどっちか考えなおしたほうがいいかもね
0542NAME IS NULL
垢版 |
2017/09/02(土) 23:03:08.61ID:???
「かなりある」とか言ってても実際は大したことない
0543NAME IS NULL
垢版 |
2017/09/02(土) 23:18:50.28ID:???
CentOS6 + mysql 5.57
社のシステムなので、アップデートやインストール、ログ設定の変更ができない前提です。

まず前置きですが

既存のデータをDB化する一環で、大量(毎日80000行)くらいのinsert文を実行しなければなりません。
insert文自体は、既存のテキストデータから必要事項を抜き出して私が組み立てています。
元のデータはwindowsだったりワープロ専用機だったりですが、最終的に全てUTF-8に変換しています。
まぁこの処理自体はマクロ等駆使してやっているので問題がないのですが、元々のテキストに本来SQLで避けなければならないような半角記号とかが含まれている可能性がありますが、そこまでのチェックは物理的にできません(やっていません)。
一応、改行を\n、半角の引用符号は全角に、程度の処置はしています。
で、この大量のテキストをsource文で読み込んで処理するのですが、所々warning**みたいな表示がでているのがわかります。
登録済み行数のチェックくらいはできますが、フィールドの中身が正しく登録されたかどうかまでのチェックはとても手が回りません。

そこで質問なんですが、SQLを実行する前にエラーになりそうな箇所を知る方法、あるいは、実際にエラーやwarningが出た行を知る方法(ツール、設定)がないでしょうか。
0544NAME IS NULL
垢版 |
2017/09/02(土) 23:37:05.01ID:???
改行コードを入れてはいけないとか
引用符を入れてはいけないとか
そんな「俺ルール」はDBにとっては知ったこっちゃないので
まずはその「俺ルール」を正確に定義しないと何も始まらない
■ このスレッドは過去ログ倉庫に格納されています

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