X



トップページDB@2ch掲示板
1002コメント319KB
SQL質疑応答スレ 18問目
レス数が1000を超えています。これ以上書き込みはできません。
0033NAME IS NULL垢版2018/02/04(日) 15:27:38.88ID:gIv0OydZ
質問です
以下のようなTableAとTableBをTableAのIDで結合して、

1. TableBに特定のKEY(ここではKEY=2)が含まれているならそのデータを、
2. 含まれていなければ若いKEYのデータを、
3. KEYそのものが存在しなければNULL

を返す結果を取得したいです
どのようなSQLなら実現しますか?


「TableA」
ID | NAME
--+-------
1 | aaa
2 | bbb
3 | ccc
4 | ddd

「TableB」
ID2 | ID | KEY | DATA
--+----+-----+-----
1 | 1   | 1    | a_key1
2 | 1   | 2    | a_key2
3 | 1   | 3    | a_key3
4 | 2   | 1    | b_key1
5 | 2   | 2    | b_key2
6 | 3   | 1    | c_key1
7 | 3   | 3    | c_key3

「結果」
ID | NAME    | ID2 | DATA
--+---------+----------
1 | aaa | 2    | a_key2
2 | bbb | 5    | b_key2
1 | ccc | 6    | c_key1
3 | ddd | NULL | NULL
0034NAME IS NULL垢版2018/02/04(日) 15:29:21.67ID:gIv0OydZ
訂正

「結果」
3 | ccc | 6    | c_key1
4 | ddd | NULL | NULL
0035NAME IS NULL垢版2018/02/04(日) 17:18:13.30ID:???
>>33
SQL-Server なら
select T.ID as ID, T.NAME as NAME, T.ID2 as ID2, T.DATA as DATA
from (
select
row_number() over (
partition by TableA.Id
order by
case TableB.[KEY]
when 2 then 0 else 1
end,
TableB.[KEY] asc
) as R,
TableA.ID as ID,
TableA.NAME as NAME,
TableB.ID2 as ID2,
TableB.DATA as DATA
from TableA left join TableB on TableA.ID = TableB.ID
) T
where T.R = 1
0036NAME IS NULL垢版2018/02/04(日) 17:38:30.70ID:gIv0OydZ
>>35
ありがとうございます
使用しているのはMariaDB 10.1でしたが(書き忘れ失礼しました)、頂いた解答をヒントに試してみます
0038NAME IS NULL垢版2018/02/04(日) 18:33:52.86ID:gIv0OydZ
>>37
こちらもちょうどそこに行き着いてました
バージョンを上げることは可能なので最新版にアップデートして試してみようと思います
わざわざ調べて頂き感謝します
0039NAME IS NULL垢版2018/02/14(水) 13:22:57.02ID:???
☆ 日本の、改憲をしましょう。現在、衆議員と参議院の両院で、
改憲議員が3分の2を超えております。『憲法改正国民投票法』、
でググってみてください。国会の発議はすでに可能です。
平和は勝ち取るものです。お願い致します。☆☆
0040NAME IS NULL垢版2018/02/15(木) 23:04:18.91ID:???
SQLがなかなか覚えられません
SELECT が先頭に来るのは覚えていますが、
次がFROMか、WHEREか迷ったりします
なにか覚えやすい方法ってありますか?
0042NAME IS NULL垢版2018/02/16(金) 00:34:33.15ID:???
>>40
順番はきっちり決まってるから覚えれば迷うことはない
それすら覚えられないならマやめた方がいい
0044NAME IS NULL垢版2018/02/22(木) 17:16:09.65ID:???
集計で、nullがあれば0で、nullが1つもない場合は最大値や最小値を取ってくるような書き方ってないでしょうか?
0045NAME IS NULL垢版2018/02/22(木) 18:10:39.74ID:???
>>44
CASE式で

SELECT c1,
CASE (SELECT count( * ) FROM t1 AS a WHERE a.c1 = b.c1 AND c2 IS NULL)
WHEN 0 THEN sum(c2)
ELSE 0 END
FROM t1 AS b
GROUP BY c1

設計見なおしたほうがいいパターンだと思う
0046NAME IS NULL垢版2018/02/22(木) 18:30:09.05ID:???
少し違うやり方だけどこっちのほうがパフォーマンスはいいかも。

SELECT c1, CASE sum(c3) WHEN 0 THEN sum(c2) ELSE 0 END
FROM (SELECT c1, c2, CASE WHEN c2 IS NULL THEN 1 ELSE 0 END AS c3 FROM t1) AS t2
GROUP BY c1
ORDER BY c1;
0047NAME IS NULL垢版2018/02/23(金) 10:11:31.58ID:???
>>45 >>46
ありがとうございます!
後者の方が問い合わせが少ない感じで良さそうですね。
0048NAME IS NULL垢版2018/02/23(金) 21:55:14.87ID:0la0B0YA
uelect文を2つ書いてunion allの方がよっぽど可読性が高い。
0049NAME IS NULL垢版2018/02/23(金) 22:08:01.48ID:KWaEL2bi
union言いたすぎてuelectになっちゃう奴カワユスw
0053NAME IS NULL垢版2018/02/24(土) 19:12:40.41ID:Au0dOZ0B
セレクト 0 as カラム別名 from テーブル名 group by グループ列名 having 列名 is null
union all
セレクト max(カラム名) as カラム別名 from テーブル名 group by グループ列名 having 列名 is not null
0054NAME IS NULL垢版2018/02/24(土) 20:27:08.92ID:pUuArQ+S
uelectになるのにビビってセレクトになっちゃう奴カワユスw
0055NAME IS NULL垢版2018/02/24(土) 20:41:54.02ID:???
いつもSQL書かずに意味不明なイチャモンだけつけてた人が
珍しくSQL書いたと思ったらやっぱり意味不明なSQLじゃんか
havingの意味分かってないんだろうな
0056NAME IS NULL垢版2018/02/24(土) 20:54:00.99ID:pUuArQ+S
>>55
おい勘違いするな
いつも意味不明なイチャモンつけてるアゲは俺だ
アゲだからといってバカと一緒にされては困るなw
0057NAME IS NULL垢版2018/02/25(日) 00:08:49.03ID:???
union all期待してたのに。。。こんな結果なの??

>>45のやつはCASE WHEN EXISTSにしたほうがよかったね
0058NAME IS NULL垢版2018/02/25(日) 03:10:53.80ID:???
SEなんだが殆ど要件定義とか折衝が主担当だから
SQLの知識があんまりなくていつも効率悪い調査の仕方だったりベンダーさんに投げてしまったりになってしまうんで質問させてください
使用しているのはoracle SQLです。
下みたいなAテーブル、Bマスタがあって
Aテーブル(トラン)
no 名前 上長名前 日付

Bマスタ
名前 社員番号 適用開始日 適用終了日

【抜き出したい情報】
・Aテーブルに1つもない(名前、上長名前)人員の情報(Bマスタの名前、社員番号)
・Aテーブルの名前、上長名前に1以上トランが発生している人員情報、発生件数(名前、上長名前で分ける)

を抽出したい場合はどうすればよいでしょうか?
実業務ではベンダーさんからの報告で解決したのですが次からは自分でも頑張ってみたくて勉強したのですが実際に書こうと思うと全く上手くいきませんOTL
0059NAME IS NULL垢版2018/02/25(日) 03:25:04.65ID:???
>>58
とりあえず自分の思うように書いてみ
0060NAME IS NULL垢版2018/02/25(日) 03:51:57.01ID:???
>>59
すみません構文もめちゃくちゃだし途中まで書いてわからなくなっちゃったのですが
上から一つ目
select B.名前,B,社員番号 from Aテーブル A inner join Bマスタ B
on A.名前 = B.名前 or A.上長名前 = B.名前
where
A.日付 between B.適用開始日 and B.適用終了日
 
ってとこまで書いて挫折してしまいました・・・・・
COUNT、EXISTSを使えばよさそうだなとは思うのですがどうでしょう?
ちなみに2つ目のはまったく見当もつかない状況です・・・・

元は営業職で今期から情報部に異動してきて勉強はしてるのですがまったくわかりません・・・
本職SEの方の文の書き方の考え方のコツなんかも教えていただけるとうれしいです
0061NAME IS NULL垢版2018/02/25(日) 15:25:45.40ID:EdN+hOz0
>>55
having に集計関数と書かずにカラム名と書いたら、見事にそこだけ問題視するんだな。

セレクトと書いているのもSQLインジェクション対策に引っかかるため。
0062NAME IS NULL垢版2018/02/25(日) 15:27:53.61ID:EdN+hOz0
セレクト 0 as カラム別名 from テーブル名 group by グループ列名 having グループ列名 is null
union all
セレクト max(グループ名) as カラム別名 from テーブル名 group by グループ列名 having max(グループ名) is not null
0063NAME IS NULL垢版2018/02/25(日) 15:29:20.92ID:EdN+hOz0
曖昧質問に対して勝手な想像で要件を決めつけて答えるのはよくない。

そもそもSQLをずばり教えてくれというのが間違い。
0064NAME IS NULL垢版2018/02/25(日) 15:31:10.48ID:EdN+hOz0
>>57
select句にselect文を書くのを推奨するな。
0065NAME IS NULL垢版2018/02/25(日) 15:37:06.31ID:EdN+hOz0
>>60
あなたが書いているとおりに書けばよい。

なぜ一つのSQLでいきなりやろうとするのか?
0066NAME IS NULL垢版2018/02/25(日) 15:39:24.08ID:EdN+hOz0
>>60
3パターンの整理をせよ。
0067NAME IS NULL垢版2018/02/25(日) 15:44:37.91ID:EdN+hOz0
>>60
それあなたのいう1つ目もできていない。
少なくともそのSQLにこだわりがあるのなら、内部結合ではなく外部結合しなければ、1つ目も達成できていない。
0070NAME IS NULL垢版2018/02/25(日) 17:49:37.39ID:fHMtmeQ2
順当にバカが発狂しとるなw
0071NAME IS NULL垢版2018/02/25(日) 18:35:17.10ID:???
>>60
1. SQLの研修を受ける
2. 最小限のテストデータを作成して試行錯誤を繰り返す
3. 少し高度なクエリをWebや書籍で学ぶ

まず1と2をやること(>>58のやつはSQLの研修を受講すれば解決できるレベル)
基本的なクエリは問題なく出来るようになってから3に進む
3はミックのブログやセルコの本がおすすめ
0072NAME IS NULL垢版2018/02/25(日) 18:36:47.80ID:???
あと要件定義が主な担当なら
SQLの書き方よりもDB設計を学んだほうが役立つ度合いが大きいよ
0074NAME IS NULL垢版2018/02/26(月) 00:51:55.29ID:???
>>71
SQLの受講は予定してるけど・・・
ここってそういうの教えてくれる板じゃないの?
勉強法なんて聞いてないんだが
0075NAME IS NULL垢版2018/02/26(月) 02:37:26.99ID:???
こいつはクズだね〜w
営業をお払い箱になって情シスでもお荷物だな
0076NAME IS NULL垢版2018/02/26(月) 02:57:29.29ID:???
簡単に解決できるレベルとかいって勉強法講釈たれる奴もどうかと思うがな
0077NAME IS NULL垢版2018/02/26(月) 14:57:52.44ID:???
>ベンダーさんに投げてしまったりになってしまうんで
とか言ってるやつがこのスレに投げるだけになるんだぜ
鬱陶しいだろ
0078NAME IS NULL垢版2018/02/26(月) 16:34:56.99ID:???
問題を解くコツを教えてもらおうとする前に基礎を学べってことだろ
内部結合や外部結合は算数で言えば四則演算レベルの基礎なんだからさ
0079NAME IS NULL垢版2018/02/26(月) 19:15:23.41ID:k450wkRK
教えたがりのくせに質問には答えたくないてどないやねんw
そのややこしい承認欲求どうにかしろやw
0080NAME IS NULL垢版2018/02/26(月) 20:28:10.94ID:???
>>60だけど
やっぱりSEって気持ち悪いな
ベンダー嬲り倒すことにしたわ
てか早く答えろやwwwPGしかできないアホなんだからこれくらいすぐ答えだせwwwwww
0082NAME IS NULL垢版2018/02/26(月) 20:59:21.87ID:???
>>81
どこが出てるんだよwwwwww
やっぱSEって頭おかしいのしかいないのなwwwwww
0083NAME IS NULL垢版2018/02/26(月) 21:13:20.39ID:???
おまえマジかww
回答してくれた気持ち悪いエス・イーさんの親切心台無しだなww
0084NAME IS NULL垢版2018/02/27(火) 20:04:14.37ID:???
困ったら黙っちゃうSEさん達現実でも2ちゃんでも同じなんだね・・・・・
0085NAME IS NULL垢版2018/02/28(水) 08:09:46.03ID:???
>>44
これでもいける
select c1,
case when count(*) = count(c2)
then max(c2)
else 0
end
from t1
group by c1
order by c1
0086NAME IS NULL垢版2018/02/28(水) 16:49:50.76ID:???
>>85
そんな答え出てるものより60でも答えたれや
0088NAME IS NULL垢版2018/02/28(水) 19:44:20.59ID:F+U9w50n
>>87
それではその答えを31文字以内で示しなさい。
0089NAME IS NULL垢版2018/02/28(水) 19:49:58.19ID:???
>>87
どこにでてんだよwwwwww
あほかよSEさんwwwwww
0090NAME IS NULL垢版2018/02/28(水) 22:18:01.64ID:???
二人もおるんかww
インターネッツの使い方も知らないんやなwwwププッ
0091NAME IS NULL垢版2018/03/01(木) 07:11:43.52ID:???
箇条書きの条件それぞれのsqlつくればいいのか?
それなら簡単じゃね
0092NAME IS NULL垢版2018/03/01(木) 07:52:43.33ID:RvibXfFY
簡単じゃねえ!
0093NAME IS NULL垢版2018/03/01(木) 11:39:27.35ID:hRou4xtV
これは「SQLの研修行け」の人が正解だったな
0094NAME IS NULL垢版2018/03/01(木) 12:18:12.52ID:/b0teX7H
>>93
バカはお口にチャックで
0096NAME IS NULL垢版2018/03/01(木) 18:35:19.24ID:???
こんな簡単な SQLも教えられないとかゴミしかいないんだなここ
そりゃ営業上がりに馬鹿にされるわけだわ
009860垢版2018/03/01(木) 18:53:30.95ID:???
ほらこの答え出るまで
俺居座るからなはやくだせや
他のやつ質問すんなよこれが最優先だから
0099NAME IS NULL垢版2018/03/01(木) 18:59:20.56ID:???
お前が質問してからのレスを全部読み返せよ、ゴミ
0100NAME IS NULL垢版2018/03/01(木) 19:05:25.93ID:???
簡単なSQLすら理解できない人に教えるとか無理ゲーやろ
0101NAME IS NULL垢版2018/03/01(木) 19:22:33.99ID:RvibXfFY
>>100
じゃあ誰に教えんだよw
0104NAME IS NULL垢版2018/03/01(木) 20:26:35.43ID:???
>>58
Bを取り出すSQLを考える
select b.* from b
存在する社員をだす
 exists (select 1 from a where a.名前=b.名前)
本来欲しいのは逆なんだから
select b.* from b
where not exists (select 1 from a where a.名前=b.名前)
0105NAME IS NULL垢版2018/03/01(木) 20:45:45.55ID:???
かけ算も割り算も分かってないやつが
四角形と三角形の面積の求め方を教えろと質問してるのと同じ状況なんだよな

かけ算も割り算も分かってないってことが分かってないレベルなら
かけ算がよくわからないので教えて下さいって言えるところまでは最低でも自力で勉強すべき
0106NAME IS NULL垢版2018/03/01(木) 20:51:29.51ID:???
例えが全然的を射てないんだよなあ
かけ算と SQL同列に語って池沼に教えるのと同じってw
お前の方がどうかと思うぞ 部下とか後輩から嫌われてない?w
0107NAME IS NULL垢版2018/03/01(木) 21:01:35.54ID:???
>>106
ガイジキタ━━━━(゚∀゚)━━━━!!
0108NAME IS NULL垢版2018/03/01(木) 21:09:42.85ID:RvibXfFY
悩める教えたがりクン>>105
愛くるしいよぅ〜wwww
0109NAME IS NULL垢版2018/03/01(木) 21:09:49.44ID:???
うわっ今どきキターとか使わないで
恥ずかしいから辞めた方がいいよ
011060垢版2018/03/01(木) 21:11:32.00ID:???
>>105
このスレ否定しちゃったよwwwwww
アホかwwwwwwお前は2度とここ見なくていいからwwwwww現実で偉ぶってろやwwwwww
みーんなおまえのこと嫌いだろうけどwwwwww
0113NAME IS NULL垢版2018/03/01(木) 22:04:21.50ID:???
内部結合/外部結合はかけ算/割り算レベル
それが分からないから難しいと思っちゃうんだろね
0114NAME IS NULL垢版2018/03/01(木) 22:08:38.92ID:???
なんで教えてくれたやつをまたスルーしてんの?
0115NAME IS NULL垢版2018/03/01(木) 22:50:37.36ID:RvibXfFY
>>114
どんだけお礼欲しがりなんだよw
はいはいありがとうございましたwwww
0116NAME IS NULL垢版2018/03/01(木) 22:51:54.37ID:RvibXfFY
ちょっとまて誰だ教えてくれたやつって?
何嘘ついてんだよ騙されたじゃねえか
0118NAME IS NULL垢版2018/03/02(金) 00:19:18.61ID:???
リアルでよほど抑圧されてんだな
ガンバレよ
011960垢版2018/03/02(金) 20:44:32.05ID:???
>>104
答えになってないが?
あほ?
012060垢版2018/03/02(金) 20:45:48.81ID:???
>>118
PGSEさんは作業するだけだもんねー
大変だなあwww応援してるよ!頑張ってよ!
0121NAME IS NULL垢版2018/03/02(金) 21:51:10.04ID:oDhTFYq0
>>118
お前が頑張れよw
0122NAME IS NULL垢版2018/03/02(金) 23:06:21.55ID:ThHddFfe
SQL初心者スレ状態
012360垢版2018/03/02(金) 23:08:56.75ID:???
>>122
SQL初心者スレみたいな質問にもまともに答えられる奴が1人もいないってどうなん?
0124NAME IS NULL垢版2018/03/02(金) 23:14:33.21ID:ThHddFfe
>>123
データベース板は過疎板だから。いるのはインフラ屋ばかりでSQLはよくわからない。
0125NAME IS NULL垢版2018/03/02(金) 23:27:14.54ID:???
回答出てるのにレスが池沼だからスルーしてるだけだろ
012660 ◆YDp73vGOso3d 垢版2018/03/02(金) 23:36:47.57ID:???
なんか俺のふりして頭おかしい人っぽく印象操作してるゴミSEがいるみたいだなトリップ付けとくわ
012860 ◆YDp73vGOso3d 垢版2018/03/02(金) 23:40:48.89ID:???
>>127
1つ目の質問はこれでできると思うが
2つ目の質問が答え出てないぞ
0129NAME IS NULL垢版2018/03/03(土) 08:36:46.58ID:???
104答えたの俺だけど60バカみたいで何も考える気が無いみたいなんで
2つ目答えようとおもったけどやめるわ
0131NAME IS NULL垢版2018/03/03(土) 12:26:43.72ID:lRXd5Nnq
別にせんでもいいのに5ちゃんでまで出来ない言い訳をしてしまうバカ正直なバカかわゆすw
0132129垢版2018/03/03(土) 14:46:46.78ID:???
教えてくださいっていったらおしえてあげる
013360 ◆YDp73vGOso3d 垢版2018/03/03(土) 16:01:20.17ID:???
お前みたいななんの特徴も個性もないゴミSEが名前つけなくていいからね^ ^
名無しに戻って2度と戻ってくんなよ^ ^
0134NAME IS NULL垢版2018/03/03(土) 17:41:54.12ID:???
1週間もたってこの程度解決できない奴って
うちの会社だったらありえないわ
去年入った新人ですら余裕で解決できるぞ
やっぱ能力無いやつっているんだな
013560 ◆YDp73vGOso3d 垢版2018/03/03(土) 19:37:31.76ID:???
>>134
な!こんな簡単な問題も解けないとか民度低すぎるわここ
あ!俺はもう SQLなんて民度低い言語勉強するのやめたからお前ら頼むな!
0136NAME IS NULL垢版2018/03/03(土) 20:38:19.21ID:???
その能力ない奴に使いっぱにされるSEさん可哀想・・・・・
SEやめよ
0137134垢版2018/03/03(土) 21:38:49.47ID:???
>>135
それぞれの名前、上長と結合したカウントをselect句に書けばいいだけだが
それすらかけないんだろw
添削してやるからかいてみろ
0138NAME IS NULL垢版2018/03/03(土) 22:33:41.88ID:???
このスレのスルー力のなさは民度低すぎと言われても仕方ないレベル
0139134垢版2018/03/04(日) 00:10:24.97ID:???
>>138
御託はいいから書いてみろよw
添削してやるって言ってるだろw
0140NAME IS NULL垢版2018/03/04(日) 00:37:32.72ID:???
懲りずにまた他人を語るやつw
0142NAME IS NULL垢版2018/03/04(日) 00:48:49.97ID:elOR/YZE
ウェレクトまだやっとったんかw
0143NAME IS NULL垢版2018/03/04(日) 00:59:59.63ID:aBRPubRf
俺と他人を混同してるようだな。
0144NAME IS NULL垢版2018/03/04(日) 01:15:14.67ID:elOR/YZE
なにコイツ有名人気取りかwwwww
0145NAME IS NULL垢版2018/03/04(日) 01:24:29.26ID:???
などとウェレクトが申しており
014660改め神 ◆YDp73vGOso3d 垢版2018/03/04(日) 01:32:39.75ID:???
何意味わかんねえ事のたまわってるのお前ら
DB板とかいう糞過疎板とか初めて来たんだがなんだよその恥ずかしいコテ
いいから早く答えだけ書けばいいんだよ
0147NAME IS NULL垢版2018/03/04(日) 10:10:03.20ID:elOR/YZE
>>145
あん?あんま調子に乗るなよウェレクトくん?オコっちゃうよオレ
0149NAME IS NULL垢版2018/03/05(月) 14:13:09.19ID:3Wgchkax
データベースのquery limit 75,000って何でしょうか?
ワードプレスを利用していますが、query limit 75,000を超えたとかで表示が制限されてしまいました・・・。

1時間で75000人以上はアクセスできないということでしょうか?
また、今後このようなエラーが起きたいために何かできることはないでしょうか?
不要なプラグインは既に削除しています。

よろしくお願いいたします。
0151149垢版2018/03/05(月) 19:20:20.57ID:TwTjzndW
いえ、でもmysqlの問題でもあるんですが・・・。
0153NAME IS NULL垢版2018/03/05(月) 20:09:33.69ID:???
>>151
MySQLの問題でもないから
ホスティング会社に問い合わせてね
015760改め神 ◆YDp73vGOso3d 垢版2018/03/06(火) 20:00:31.31ID:???
うっせえSE如きが意見してんじゃねーよ
はやく答えろやゴミ
ってみんな思ってるからな?wwwそういうふうに思いながら仕事しろよ?wwwwww
0158NAME IS NULL垢版2018/03/07(水) 20:56:18.81ID:7USA4bpQ
そろそろ飽きてきたから俺が答えちゃおうかなwいいのか?お前ら?w
0160NAME IS NULL垢版2018/03/08(木) 07:15:45.81ID:???
アホコテはngにしてるからどうぞお好きに
0162NAME IS NULL垢版2018/03/08(木) 21:47:16.61ID:/+R2cp3T
>>160
ウェレクトは黙っとけまた恥かくぞ
0164NAME IS NULL垢版2018/03/09(金) 16:53:42.16ID:???
・SQLインジェクション対策はシングルクォートを空白に置換すればOK
・テーブルで年月のみを入れる項目は文字列型で定義
この辺を論破できないので悲しい...

シングルクォートなんてデータ入れねーよ m9(^Д^)プギャー
年月のみならサイズを小さくできるよといわれる
0167NAME IS NULL垢版2018/03/10(土) 12:48:06.89ID:???
年月を文字型にすると
・比較相手によってはキャストが必要
・範囲チェックが働かない
・容量が増える

逆に年月を文字列型にするメリットって何かあるの?
あと速度的なとこも気になるね
0168NAME IS NULL垢版2018/03/14(水) 12:59:09.36ID:E2z4/zZm
>>164
いまどき数バイト削るためにコンピュータの数値型を使うのは時代錯誤。しかもリレーショナルデータベースでは文字として出力するのが優先だから文字表現でデータを格納するのが基本。
0170NAME IS NULL垢版2018/03/14(水) 18:50:24.54ID:???
え、え〜〜!?
これは救いようもなくヤバイ
0171NAME IS NULL垢版2018/03/14(水) 19:40:23.59ID:9cJyYZaB
疑心暗鬼すぎる>>169かわゆすw
0174NAME IS NULL垢版2018/03/14(水) 20:24:27.64ID:9cJyYZaB
多くのゴミの中でも本当にゴミと言えるのは>>172だけやでw
0175NAME IS NULL垢版2018/03/15(木) 00:28:50.67ID:08yLtO65
>>167
int型の項目値を文字列に変換する方がはるかに負荷が大きい。
017660改め神 ◆YDp73vGOso3d 垢版2018/03/15(木) 00:39:41.41ID:???
正直なそんな低レベルなDB設計してる奴がいるとこで働いてるお前がかわいそうだわ
んでそんな話どうでもいいから早く質問答えろな?
0177NAME IS NULL垢版2018/03/15(木) 00:52:07.97ID:???
年月は数字項目にしといたほうがトラブルが少ない。整合性チェックにもなる
文字列にして文字が入ってたりすると日付形式に変換する時エラーになる
0178NAME IS NULL垢版2018/03/15(木) 00:54:30.05ID:08yLtO65
>>167
キャストが必要というのもコンピュータの数値型を使っていても、最終的には文字列に変換する。

年月の同士の計算が膨大にあるのであれば理解できなくないが、日付項目同士の比較は日付型で行う。

コンピータの数値表現で扱ってしまうと、まず日付型に変換し、実在しない年月や、1ヶ月前、1ヶ月後、月末日等の特定に2段階のキャストが必要になる。

現実には存在しない年月を生み出してしまうリスクまでとる必要がない。

何度も言うが年月の単純計算などほぼないうえに、文字列に大小判定は気にせず、コンピータの数値ばかりこだわるのはリレーショナルデータベースを理解していないどころか、コンピータを理解していない。
0179NAME IS NULL垢版2018/03/15(木) 01:04:17.75ID:???
いつもの人ですねー
お薬出しときますねー
0182NAME IS NULL垢版2018/03/15(木) 17:36:45.04ID:???
一人で勝手にint型や数値型を持ちだしてそれを的外れな長文で否定w
文脈を理解してないどころか、一般常識を理解していない。
0183NAME IS NULL垢版2018/03/15(木) 20:48:02.74ID:S1KKHbYv
バカ必死やねw
0184NAME IS NULL垢版2018/03/17(土) 13:49:54.26ID:tBZQagyi
  ★★★根税制による格差解消は、赤犬を根絶しユダヤ支配を永遠に終わらせる為の決め手である。★★★

▲  この掲示板(万有サロン)に優秀な書き込みをして、総▲額148万円の賞金をゲットしよう!(*^▲^)v
  http://jbbs.livedoor.jp/▲study/3729/ →リンクが不良なら、検索窓に入れる!
0186NAME IS NULL垢版2018/03/18(日) 11:46:44.87ID:a+ovhjNW
それはSQLの書き方がおかしいんだろ
0187NAME IS NULL垢版2018/03/18(日) 15:36:28.47ID:???
ホントに文脈も一般常識も理解してないのな
018860改め神 ◆YDp73vGOso3d 垢版2018/03/18(日) 23:26:43.98ID:???
統計情報も取らないアホ集団で仕事してるのはわかったから
はやく俺の質問答えてや^ ^
0189NAME IS NULL垢版2018/03/20(火) 22:22:54.01ID:Rscf1saE
>>185
CPUは使うものですよ。
0190NAME IS NULL垢版2018/03/20(火) 22:23:50.07ID:Rscf1saE
>>188
統計情報はユーザーが取るものではないぞw
0191NAME IS NULL垢版2018/03/24(土) 13:21:59.28ID:GEutIhi9
訳のわからんツッコミにさすがの神もタジタジの様子w
0192NAME IS NULL垢版2018/03/25(日) 01:04:30.70ID:yjy1y48X
MySQL (InnoDB) で ALTER TABLE をする際の振る舞いとしてテーブル単位のロックではなくインスタンス全体をロックしているような挙動を示しています
innodb_file_per_table を疑ったが ON だったのですが何が問題なんでしょうか
0194NAME IS NULL垢版2018/03/25(日) 17:11:51.29ID:???
>>192
追記:
原因の切り分けが非常に難しく、 AWS RDS を利用しているからこうなっているのか、
それともこの挙動が発生したインスタンスに大量のデータベース・テーブル(150万テーブル以上)が存在していることが問題なのか、
他に見落としている条件がないかを調査している。
0195NAME IS NULL垢版2018/03/26(月) 12:26:18.51ID:E8QJAuxE
テーブル数150万てwどうしてそうなったw
019760改め神 ◆YDp73vGOso3d 垢版2018/03/26(月) 18:44:41.84ID:???
ああごめんね。テーブル数150万はないわ。
どんな教育受けてきたん?
はいこの話終わり早く答えて
019960改め神 ◆YDp73vGOso3d 垢版2018/03/26(月) 22:38:34.91ID:???
>>198
そうだね教えを請うたことないわ
いっつも享受する側だわ
スキーマテーブルレコードカラムの違いがわかんないアホがこのスレ使ってんなや!
0200NAME IS NULL垢版2018/03/27(火) 07:18:12.07ID:???
まだ居座ってるんだ
このかわいそうな人
0201NAME IS NULL垢版2018/03/27(火) 07:21:01.46ID:Sf3AYZp2
間違いを指摘された途端にブチ切れ始めた
0202NAME IS NULL垢版2018/03/27(火) 12:28:22.82ID:5YfwV0Ug
「指摘したって言う奴の指摘は大体間違っている」の法則
0205NAME IS NULL垢版2018/03/27(火) 19:00:54.47ID:???
SQLの事だと思い込んでいる事も意味不明
0209NAME IS NULL垢版2018/03/28(水) 22:42:12.95ID:???
>>207
書き間違えまで揚げ足取るってやべえなここの民度
0211NAME IS NULL垢版2018/03/28(水) 23:27:20.25ID:???
普通そんな所書き間違えるなんてしないよ
0213NAME IS NULL垢版2018/03/29(木) 01:27:17.73ID:???
読み間違えた挙句にアホ呼ばわりする人間が民度を語るなよ。みっともない奴だな。
0214◆YDp73vGOso3d 垢版2018/03/29(木) 01:35:47.13ID:???
>>213
君名前欄も読めないメクラさんかな?
民度どうこうなんて言ってないんだけど?
文体から伝わってくるんだけど加齢臭口臭やばいでしょあなた?
0215NAME IS NULL垢版2018/03/29(木) 03:34:49.63ID:???
>>212
あら「普通」の概念が破綻してる方がまたいらっしゃった
0216NAME IS NULL垢版2018/03/29(木) 12:25:25.63ID:siRTS5gv
あら「普通」の概念が堅固なバカがまたいらっしゃった
0219NAME IS NULL垢版2018/04/03(火) 20:44:20.13ID:wbI218I7
select A1,A2 from tableA
select B1 from tableB

これをそのまま流すと結果は2行になりますが、
これをA1,A2,B1と1行でとる方法はないでしょうか
0220NAME IS NULL垢版2018/04/03(火) 21:07:32.04ID:???
書き忘れましたが、どちらも1行しか返さないSQLです
0221NAME IS NULL垢版2018/04/03(火) 21:10:17.03ID:???
>>219
それぞれの実行結果が1行しかないなら

select tableA.A1, tableA.A2, tableB.B1 from tableA, tableB;
0223NAME IS NULL垢版2018/04/04(水) 08:04:54.29ID:2HlnMqVc
MysqlがすぐおちるのですがMariaDBにすれば改善されるのでしょうか?

よく出るエラーメッセージはこんなやつです。
mysqli_set_charset(): Error executing query in DBのURL

MariaDBはMysqlに比べてどのぐらい優れているのかもわからないので教えていただければ幸いです。
0224NAME IS NULL垢版2018/04/04(水) 13:11:13.69ID:???
>>223
おそらくデータベースに設定している文字セットで不整合があるんだろうと思いますが
MySQLの設定方法に関する質問の場合は、ここで聞くよりも、
MySQL 総合 Part26
https://mevius.5ch.net/test/read.cgi/db/1499949595/
で聞いた方が良いかと思います。

MariaDBに関するスレもあります。覗いてみると良いかもしれません。
https://mevius.5ch.net/test/read.cgi/db/1360677476/
0225NAME IS NULL垢版2018/04/04(水) 16:32:49.81ID:+pp14tKO
誤爆かもな
0226NAME IS NULL垢版2018/04/04(水) 21:47:48.32ID:???
with句で取得した数列を別のテーブルでその数列と一致するレコードを取得したいんだけどどうすればいいでしょう?
withで別で取得したリスト名Aとし取得結果がBだとすると
select ※ from X
where X.C IN (SELECT B FROM A)
で取得しようとしたんだが上手くいかずいろいろとぐぐってみたけどわからなかったです・・・
0227NAME IS NULL垢版2018/04/04(水) 21:48:51.99ID:tDmvnrOB
DB名も書けないとか
0228NAME IS NULL垢版2018/04/04(水) 22:51:56.44ID:???
withで別で取得したってのが意味わからん
その部分を含めてどうやろうとしたのか書けば答えようもあるが
0229NAME IS NULL垢版2018/04/04(水) 23:31:43.42ID:???
すみません。書き方が悪かったです。
使用しているのはoracleです。
with A AS (SELECT X FROM Z
GROUP BY X)
SELECT COUNT(※) FROM B
WHERE B.C IN(SELECT X FROM A)
のような文を書いてエラーとなりました。
イメージ的にはZテーブル上のXの数列についてBテーブルに何件存在するかを確認したいです。
023060改め神 ◆YDp73vGOso3d 垢版2018/04/04(水) 23:59:17.52ID:???
参考書でも開けばそんくらいわかんだろゴミ
早くお前ら答えろや
スレチの質問には誘導して俺の質問には答えないって根性捻れまくりだろお前ら
0231NAME IS NULL垢版2018/04/05(木) 01:39:19.17ID:l3AE4+ue
「Xの数列」という説明が他人には理解できない。

Xがひとつの列だとするとなぜグループ化なのかわからない。

さらに再帰クエリにして、別のSELECT文のINリストのSELECT文にしているのも意図がくみにくい。

かなり単純なことを聞いていると予想はできるが、なぜこんなに難しく考えているのか?
0232NAME IS NULL垢版2018/04/05(木) 06:25:28.48ID:???
本当に>>229の通りに書いているならcount(※)がcount(*)の間違いだが
それ以外に致命的な間違いは見当たらない
まあこう書いても同じ意味にはなる
select count(*) from B inner join Z on B.C = Z.X;
0234NAME IS NULL垢版2018/04/05(木) 19:22:56.90ID:l3AE4+ue
再帰のないWITHを再帰クエリと呼ぶなということか。

ただOracleは再帰があってもなくてもただWITHと書いて、再帰のないWITHと言ったりするからそう書いた。

標準SQLではWITH RECURSIVEと書かないといけないが、Oracleはたしかこの構文がない気がする。
0235NAME IS NULL垢版2018/04/05(木) 19:24:12.57ID:l3AE4+ue
他人のミスに厳しいならそう自己紹介してくれ。
0236NAME IS NULL垢版2018/04/05(木) 20:02:25.68ID:???
ではまずご自身からどうぞ
0238NAME IS NULL垢版2018/04/05(木) 21:29:58.31ID:???
>>232
B.CかZ.Xの少なくともどちらかがユニークでないと同じ意味にはならん
0239NAME IS NULL垢版2018/04/06(金) 00:33:07.86ID:GwnuWxH/
このスレはSQL入門スレなのかSQLオタクスレなのか?

よくわからない質問に、エスパー回答をするというIT技術者の間ではあまりないやりとりが多い。
0240◆YDp73vGOso3d 垢版2018/04/06(金) 01:28:52.77ID:???
テンプレ見ろゴミ
ここは初心者用スレだよ
なのに俺の質問は基礎的すぎるとかいう謎老人のおかげで誰も答えんのや
まじでゴミSEは右ならえの自我すら持たない穢多非人よ
0241NAME IS NULL垢版2018/04/06(金) 08:24:33.64ID:???
いつまで粘着してんだ、このキチは
0242NAME IS NULL垢版2018/04/06(金) 12:19:44.04ID:1nt8ANDW
>>239
IT技術者の間ではよくわからない質問によくわからない回答をして
お互い納得するのがデフォルトスタンダードですものねw
0243NAME IS NULL垢版2018/04/06(金) 12:43:29.95ID:???
ここはわざと言い間違えるスレか?
0244NAME IS NULL垢版2018/04/06(金) 12:58:57.72ID:GwnuWxH/
まず質問者が無礼。回答者がとりあえず想像で回答。これがこのスレが機能していない理由。
0245NAME IS NULL垢版2018/04/06(金) 13:59:04.00ID:GwnuWxH/
>>240
初心者向けであれば、SQLを回答するのではなく、何をしようとしているのを確認するのが先です。できればいい論をデータベース板で確認するのはおかしいので、プログラム板やプログラマ板で質問すべきです。
0246◆YDp73vGOso3d 垢版2018/04/06(金) 20:23:48.23ID:???
>>245
わかったわかったお前の意見とかどうでもいいわ
文体見るだけで中年のごみおっさんってわかるわやばいよ君?
0247NAME IS NULL垢版2018/04/06(金) 20:45:46.08ID:???
匿名の掲示板で誰でも書き込めるんだから
気に入らなければスルーすれば良いだけ
質問者が無礼って、お前に害悪を加えてきたわけじゃあるまいし
0248NAME IS NULL垢版2018/04/06(金) 21:22:42.32ID:+EV0F8Wd
助けてください。
ACCESSのDBなんですが、
tblAは、[id][なまえ][電話番号][性別][入会日]というフィールド構成のマスター名簿
tblBは、[id][入金日][入金額]というフィールド構成です。

このテーブルを元に、ACCESSやEXCELのVBA上で、

[id] [なまえ] idごとの[入金額]の合計 WHERE 昨日=<[入金日] <= 明日

というレコードセットを取得したいです。
tblBの集計に、tblAからもってきたなまえフィールドをくっつけたい、という感じです。
INNER JOINとか、そういうのを駆使して、なんとかひとつのSQL文を作りたいのですが、
うまくいきません。
どなたか、SQL文そのものをご教示ください。
お願いします。
0249NAME IS NULL垢版2018/04/06(金) 21:55:43.69ID:???
>>248
このままだとよくわからん
「誰が」入金したという情報はどこで管理しているの?
0250NAME IS NULL垢版2018/04/06(金) 22:00:07.59ID:+EV0F8Wd
>>249
すみません。idというのは、メンバーidのことです。レコードidではありません。
わかりづらくてすみません。

メンバー(マスターで、idから名前がわかる)による入金の記録がBテーブルです。
それぞれのメンバーが、合計でいくら入金したのか、を集計したいのですが、
Bテーブルにはidしかなく、集計表には名前も欲しいので、Aテーブルから持ってきたいのです。
0251◆YDp73vGOso3d 垢版2018/04/06(金) 22:08:41.64ID:???
>>250
君質問する以前の問題だよ?
あと今質問受け付けてないからばいばい
0252NAME IS NULL垢版2018/04/06(金) 22:09:44.34ID:???
>>250
えーと
同じ日に2件以上の入金はないということ?
0253NAME IS NULL垢版2018/04/06(金) 22:12:55.34ID:+EV0F8Wd
>>252
ありえます。
なので、SUM[金額] GROUP BY id としたいです。
0254NAME IS NULL垢版2018/04/06(金) 22:20:07.86ID:???
>>253
そもそもテーブル設計がまずいのでは
同じ人が同じ日に同じ金額を入金したらどうなるの?
主キーは?
0255NAME IS NULL垢版2018/04/06(金) 23:15:05.62ID:+EV0F8Wd
Bテーブルにはオートナンバーのridフィールドがあります。
0257NAME IS NULL垢版2018/04/07(土) 09:47:12.83ID:???
>>248
Accessは知らんが一般的なSQLではこんな感じ

select A.id,
    A.なまえ,
    B.合計
from  tblA A
    inner join
    (select id,
        sum(入金額) as 合計
    from  tblB
    where  入金日 between 昨日 and 明日
    ) B
    on A.id = B.id
;
0258257垢版2018/04/07(土) 09:48:19.23ID:???
サブクエリ内にgroup by id書くの忘れた
0259NAME IS NULL垢版2018/04/07(土) 15:34:15.71ID:???
>>248
accessで作ってやったぞ
これでどうだ。

SELECT tblA.ID, tblA.[なまえ], Sum(tblB.入金額) AS 入金額の合計
FROM tblA INNER JOIN tblB ON tblA.ID = tblB.ID
WHERE (((tblB.入金日)>='2018-04-06' And (tblB.入金日)<='2018-04-08'))
GROUP BY tblA.ID, tblA.[なまえ]
ORDER BY tblA.ID;
0262NAME IS NULL垢版2018/04/15(日) 00:36:03.26ID:???
>>4 のよくある質問2で、keyに別テーブル?配列?を指定することはできますか。
(key=3など、BDにない項目のカウント結果は当然ゼロになるが、それも結果として欲しい)

1〜12の数値(月)で集計するとか、47都道府県をキーとするとか、
ニーズはありそうなので方法もあるように思うのですが。

DBは、Google Fusion Tablesです。
0263NAME IS NULL垢版2018/04/15(日) 00:56:40.79ID:???
>>262
具体的にテーブルの内容を例示してみて
0264NAME IS NULL垢版2018/04/15(日) 01:11:20.64ID:???
outer joinのことを言いたいんだと思う
0266◆YDp73vGOso3d 垢版2018/04/15(日) 17:01:53.04ID:Bs6Qpy/T
おいおいおいおいouter joinとかいう初心者以前の質問には答えて
俺の質問には答えんのかい
お前らほんと捻くれてるな
これだからSEとかいうオタク共はいじめたくなるんだよなあ
0268NAME IS NULL垢版2018/04/19(木) 00:19:53.73ID:ACyU9sdk
>>266
答えられんのはプログラマーとかゆうコーダーだろ
SEとゆうのは俺様みたいな有能のことたぜボーイ!
0269NAME IS NULL垢版2018/04/19(木) 01:05:53.36ID:pgNamYVa
>>268
you?
0270NAME IS NULL垢版2018/04/20(金) 20:42:22.38ID:cUph+NAS
>>269
なんや?SE様に何か用か?
0271NAME IS NULL垢版2018/04/28(土) 20:00:00.97ID:???
テーブル分割してidなどで紐付けるのが基本なのは分かるんですけど
この値がどのidなのか毎回自分でテーブル確認してinsertするのが大変で困ってます
リストボックスみたいなので'ゆうちょ'を選んだら(bank_id=)3みたいに支援してくれる機能ってSQLでできませんか?
RDBMSはMySQLでLinuxのターミナル使ってます
0272NAME IS NULL垢版2018/04/28(土) 21:05:32.03ID:???
それはSQLではなくWeb画面等使って選択させれば良いだろう
0273NAME IS NULL垢版2018/04/28(土) 21:36:58.41ID:f64A+t1T
>>271
SQLの話ではないな。
0275NAME IS NULL垢版2018/04/29(日) 03:58:48.45ID:uDICrjO7
>>271
IDを使わず銀行名でやってみてください。

自分が経験しなければ、なぜそうした方がいいのか、わかりませんよ。
0276NAME IS NULL垢版2018/04/29(日) 10:54:53.31ID:???
>テーブル分割してidなどで紐付けるのが基本なのは分かるんですけど

それは分かってるっていうよりメリットデメリット理解しないまま鵜呑みにしてるだけだよね。
どうせ鵜呑みにするなら教科書通りのリレーショナルDB設計から入ればいいのに。
0277NAME IS NULL垢版2018/04/29(日) 11:08:37.04ID:???
更新時のレコード件数を減らしたり情報の集約・一元化がメリットですよね。ざっくりとは理解してるつもりです。
ただターミナルからSQLで複数のレコードを追加するには自力でテーブル確認する必要あるのが使いづらいなと思って
0278NAME IS NULL垢版2018/04/29(日) 11:34:58.17ID:???
select bank_id from m_bank where bank_name = ’ゆうちょ’

こんなサブクェリーを追加SQLに埋め込む
0279NAME IS NULL垢版2018/04/29(日) 12:34:02.47ID:???
>>278
こういうときに副問合せ使うんですね、使いやすそうで凄く良さそう。
早速使ってみます。
ありがとうございます。
0280NAME IS NULL垢版2018/04/29(日) 13:38:14.58ID:uDICrjO7
マスタテーブルではないのか?
0281NAME IS NULL垢版2018/04/29(日) 14:23:08.00ID:???
>複数のレコードを追加するには自力でテーブル確認する必要ある

これの意味が判らん
0282NAME IS NULL垢版2018/04/29(日) 18:36:41.80ID:???
説明下手ですみません。
初心者なのですごく初歩的な質問でした。
取り敢えずサブクエリで解決しましたが一応

habook:
id, money, method_id
...
135, -5000, 58
...

method:
method_id, method_name
...
58, 'ゆうちょ銀行'
...

INSERT INTO habook VALUES (200, -1000, ???)
method_idが多くてゆうちょ銀行のidがパッと思い出せなくて詰まる
methodテーブルを自分で確認してソニー銀行のidを調べてinsertに打ち込む

同じような感じで外部キーの列が増えるとインサートする度に自分で調べる必要があって大変になってきたのでなにかいい方法ないか聞きました。


混乱させてすみません。
0283NAME IS NULL垢版2018/04/29(日) 18:57:21.95ID:???
使用しているのはoracle SQLです。
下みたいなAテーブル、Bマスタがあって
Aテーブル(トラン)
no 名前 上長名前 日付

Bマスタ
名前 社員番号 適用開始日 適用終了日

【抜き出したい情報】
・Aテーブルに1つもない(名前、上長名前)人員の情報(Bマスタの名前、社員番号)
・Aテーブルの名前、上長名前に1以上トランが発生している人員情報、発生件数(名前、上長名前で分ける)

を抽出したい場合はどうすればよいでしょうか?
0284NAME IS NULL垢版2018/04/29(日) 19:30:40.63ID:???
学校の宿題みたいな設問だな
0285NAME IS NULL垢版2018/04/29(日) 19:48:09.61ID:i1PXJR4v
>>282
自分でそういうプログラムを作ればいい。
0286NAME IS NULL垢版2018/04/29(日) 19:49:09.41ID:i1PXJR4v
>>284
トランザクションデータをトランと略しているあたりから、どこかの会社だろう。
0287NAME IS NULL垢版2018/04/29(日) 19:49:26.43ID:ccXAu8y/
同姓同名には考慮しなくて良いの?
0288NAME IS NULL垢版2018/04/29(日) 19:51:35.86ID:i1PXJR4v
>>283
外部キーが社員番号ではなくて名前なのはネタだからか?
0289NAME IS NULL垢版2018/04/29(日) 22:10:20.38ID:???
>>282
どのぐらいの頻度でSQL使うかわからんけど、こんなのでもいいんかね
insert into habook(id, money, method_id)
select 200, -1000, method_id from method where method_name='ゆうちょ銀行'
0290NAME IS NULL垢版2018/04/29(日) 22:12:28.42ID:???
>>283
>>58と同じみたいなんだが、いまだにわからないのかw
0291NAME IS NULL垢版2018/04/29(日) 22:15:33.56ID:???
銀行は銀行名の変更とか合併とかあるから
そういった事も考えないといけない
0292◆YDp73vGOso3d 垢版2018/04/30(月) 03:17:07.21ID:???
お前らはどうしても俺の質問には答えたくないみたいだな
0293NAME IS NULL垢版2018/04/30(月) 08:36:43.41ID:???
頼み方ってものがあるだろ
ほら言ってみろ
0294NAME IS NULL垢版2018/04/30(月) 10:55:57.85ID:FupcYnE7
コメントが一杯付いてて良かったじゃないか
0295NAME IS NULL垢版2018/04/30(月) 14:55:41.60ID:???
下みたいなAテーブル、Bマスタがあって
Aテーブル(トラン)
no 名前 上長名前 日付

Bマスタ
名前 社員番号 適用開始日 適用終了日

【抜き出したい情報】
・Aテーブルに1つもない(名前、上長名前)人員の情報(Bマスタの名前、社員番号)
・Aテーブルの名前、上長名前に1以上トランが発生している人員情報、発生件数(名前、上長名前で分ける)

を抽出したい場合はどうすればよいでしょうか?
0296NAME IS NULL垢版2018/04/30(月) 14:57:09.24ID:???
>>295
同じ名前の社員がいたとき、どうすれば良いの?
0297NAME IS NULL垢版2018/04/30(月) 15:03:04.31ID:???
結婚とか離婚して姓名変わったらどうすんだ
0298NAME IS NULL垢版2018/04/30(月) 17:56:27.86ID:???
もうここしか頼るところがございません。
SQL server7.0が、綺麗にwin10のPCだけつながらなくなりました。
「接続できませんでした。 SQL state'ST100'
SQL server エラー0
[microsoft][ODBC SQL server driver] ログインが時間切れになりました」
と出ます。どうすればいいのでしょうか
0301NAME IS NULL垢版2018/04/30(月) 19:16:11.68ID:L8ngFuqq
>>298
ああこれはログインが時間切れになってるね
ログインが時間切れにならないように注意しなよ
0303NAME IS NULL垢版2018/05/04(金) 20:14:40.86ID:???
外部キーって必ず他のテーブルの主キーじゃないとダメなの?
0304NAME IS NULL垢版2018/05/04(金) 21:31:51.25ID:???
主キーでなくてもUNIQUE制約がついていれば大丈夫だと思う
0305NAME IS NULL垢版2018/05/04(金) 22:29:19.11ID:GLAEl09j
>>303
>>304
これ自分も知りたいからageてみるか
0306NAME IS NULL垢版2018/05/05(土) 00:10:26.39ID:T65X27xi
>>303
一意制約の列でもよい。要は重複値を持っている列では外部キー制約に使用できない。
0307303垢版2018/05/05(土) 01:36:42.07ID:dfGZW7dT
>>304
>>306
ありがとうございますm(_ _)m
0308NAME IS NULL垢版2018/05/10(木) 23:54:50.05ID:???
DB殆ど触ったことないので分からないのですが、
1. SQLでは[ユーザー名, パスワード, [データA], [データB]] (便宜的にリスト形式にしています)
のようなDB構造は作れるのでしょうか?

つまり、ユーザー名とパスワードは1ユーザに1つずつ、データA,B,C、、、は内部に複数のデータを持つような構造です
ちなみに扱いたいSQLはpostgreSQLです

2. node.jsとpostgreSQLを使ってウェブアプリを作ろうと思っているのですが、postgreSQLでは最初にDB構造の宣言などはしなくて良いのでしょうか?

Swift + RealmでDBを使った際には、ユーザーモデルっていうDB構造?を宣言してから使ったので、少々混乱しています

3. node.jsとpostgreSQL(npmで)をWindowsにインストールしたのですが、postgreSQLが動きませんでした
WindowsにもpostgreSQLをインストールしなければいけないのでしょうか?


よろしくお願いします
0309NAME IS NULL垢版2018/05/11(金) 03:50:27.46ID:JrURJydT
MySQLです。数値を計算するSQL文ってあるでしょうか?

例えば、rankingテーブルに「access」と「click」というカラムがあるとします。
accessは×1でclickは×5にして、その合計数値が多い値(降順)で表示

みたいなことがしたいです。
0310NAME IS NULL垢版2018/05/11(金) 05:53:20.74ID:6wqBIw87
>>308
まずはDBを触りましょう
SQLではと書いているということは他ならわかるのでしょうか
RDBでは一般的に
[ユーザーID,ユーザー名,パスワード]
[ユーザーID,データ番号,データ]
のようなテーブルを作成してユーザーIDで結合します
これを正規化といいます

>>309
素直に
order by (ranking.access + ranking.click * 5) desc
でいけるかと
0311NAME IS NULL垢版2018/05/11(金) 17:09:15.29ID:???
SQL初心者です。
連続して1が立っている時間
(行数、データ数)は求められないでしょうか。
1が出てきたタイミングで後どれだけ続くかをその行に書き込みたいです。
0312NAME IS NULL垢版2018/05/11(金) 21:47:33.52ID:???
>>310
いけました!orderに計算するって概念がありませんでした。
とても勉強になりました。ありがとうございます
0313NAME IS NULL垢版2018/05/12(土) 09:16:12.16ID:???
>>311
どういうテーブル、イメージしてるデータの並びを書かないとレスつかないんじゃないか
0314NAME IS NULL垢版2018/05/12(土) 20:19:54.53ID:???
>>313
ありがとうございます。

A B
0 0
0 0
1 3
1 0
1 0
0 0
0 0

AからBを作りたいです。
Bの3は1が3つ続いていることを意味します。
0315NAME IS NULL垢版2018/05/12(土) 21:14:06.97ID:???
>>314
順序も規定せずに 「続いてる」とか言われてもなあ
Excel + VBA とかでやれば?
0317NAME IS NULL垢版2018/05/12(土) 21:39:12.17ID:???
>>315
>>316
No A B
0 0 0
1 0 0
2 1 3
3 1 0
4 1 0
5 0 0
6 0 0
7 1 2
8 1 0
9 0 0

例えばこの様な連番が有れば出来るものでしょうか。

すみません。
SQLで出来るのか?
出来るならどのような方法が有るのか
知りたいです。

よろしくお願いします。
0318NAME IS NULL垢版2018/05/12(土) 22:16:46.98ID:???
>>317
これで
2 1 3
7 1 2
がとれたらいいわけ?
時間っていってたわりにはそういう結果をかいてないが
0320NAME IS NULL垢版2018/05/12(土) 22:28:15.77ID:???
最新の(つまりinsertする前の)NoでAが1で、かつ追加するデータのAが0だったら
直前のAが0のデータのNoを見る
例ならNoが9の時に0になったから直前のAが0のデータはNoが6だと。
んで、7,8が連続したものだった
だからNo7のBに2をセット

こんな感じ?
0321NAME IS NULL垢版2018/05/12(土) 23:17:44.19ID:???
>>318
分かりにくく申し訳ありません。
元々時系列のデータだったので
時間という書き方をしていました。
(何個続いたか知りたいのです)

NOとAの項目がある状態でBの項目
を追加したいと思っています。

318様のような結果でも構いません。

>>319
MSのSQL Serverです。申し訳ありませんが詳細なバージョンなどは不明です。

>>320
ありがとうございます。
書かれているようなことが
実現できればと思います。
0322NAME IS NULL垢版2018/05/12(土) 23:18:49.98ID:???
>>317
SQL文でやるならレコードを次々と参照しないといけないから再帰SQL使わないとだめだろうな
あるいはプロシージャでカーソル使う
あるいはプログラムでやる感じになる
0323NAME IS NULL垢版2018/05/13(日) 00:03:02.98ID:???
SQL Serverでなく、MySQLです、済みません。テーブル名はtと仮定しました。

create procedure setB()
begin
 declare done int;
 declare _flag int;
 declare _cnt int;
 declare _a int;
 declare _no int;

 declare cur cursor for select No,A from t order by No desc;
 declare exit handler for not found set done = 0;
 set done = 1;
 set _flag = 0;
 set _cnt = 0;
 
 open cur;
 while done do
  fetch cur into _no, _a;
  if _a = 1 and _no > 0 then
   update t set b = 0 where No = _no + 1;
   set _cnt = _cnt + 1;
  else
   update t set b = _cnt where No = _no + 1;
   set _cnt = 0;
  end if;
 end while;

 if _a = 1 then
  update t set b = 0 where No = _no;
 else
  update t set b = _cnt where No = _no;
 end if;
 close cur;
end;
0324NAME IS NULL垢版2018/05/13(日) 05:37:55.80ID:???
>>322
ありがとうございます。
教えていただいたキーワードをもとに
調べてみます。

>>323
ありがとうございます。
今はPCをさわれる環境にないので月曜日に試してみたいと思います。
0325NAME IS NULL垢版2018/05/13(日) 07:21:58.29ID:???
>>322
再帰やストアドなんて要らんでしょ
>>318 の結果を得たいだけなら

select
 T1.NO, T1.A,
 (
  select min(T3.NO) as NO
  from T as T3
  where T1.NO < T3.NO and T1.A <> T3.A
 ) - T1.NO as [連続数]
from T as T1
inner join T as T2 on T1.NO - 1 = T2.NO and T1.a <> T2.a
where T1.A = 1

で十分でしょ (わかると思うけど表名は T ね)
0326NAME IS NULL垢版2018/05/13(日) 09:51:48.44ID:???
>>325
ありがとうございます。
試してみます。
0327NAME IS NULL垢版2018/05/13(日) 11:09:02.63ID:???
再帰SQLでやるならこんな感じ
最初に1がでたところで表示したいとのことなので
レコードの最後から加算積み上げてる
半角でレスしようとしたらインジョクションかなんかでエラーになった
ため全角に変換してます

WITH CTE AS (
SELECT NO,A,A AS B 
FROM TBL AS M

UNION ALL 
SELECT M.NO ,M.A ,S.B + 1 AS B −−Bを1で積上げていく
FROM TBL AS M
inner join CTE AS S
on  M.NO = S.NO −1 −−レコードの後ろから参照
and S.A = 1
and M.A = 1

), [WK1] AS (
SELECT NO,A,max(B) as B −−Bが積上開始位置により別々の数字になっているので最大値でサマリー
FROM CTE AS M
GROUP BY NO,A


SELECT M.NO,M.A,case when S.A = 0 then B else 0 end B −−前のレコードがゼロの時のみBを表示
FROM [WK1] AS M
LEFT JOIN TBL AS S
on M.NO −1 = S.NO 
ORDER BY M.NO
0328NAME IS NULL垢版2018/05/14(月) 10:07:01.26ID:???
>>325
>>327
ありがとうございます。どちらも思ったような結果が得られました。
>>323
ありがとうございます。
今回は動かせていませんが、MySQLをさわる機会に試してみます。

4月末よりSQLを使わなければいけなくなり、困っていました。
皆さんに教えていただいた方法を理解し自由にSQLが書けるよう頑張ります!
0329NAME IS NULL垢版2018/05/17(木) 11:36:55.43ID:???
教えて下さい。

下記の表Tに於いて
NO,START,STOPが与えられているとき
KEKKAという行を得たいです。
良い方法があれば教えてください。
(STARTからSTOPの間に1を立てたい)
DBはMicrosoft SQL Serverです。

NO START STOP KEKKA
1 0 0 0
2 0 0 0
3 1 0 1
4 0 0 1
5 0 0 1
6 0 1 1
7 0 0 0
8 0 0 0

よろしくお願いします。
0330NAME IS NULL垢版2018/05/17(木) 15:57:54.69ID:???
>KEKKAという行を得たい

????????
0331NAME IS NULL垢版2018/05/17(木) 16:33:50.08ID:???
>>330
わかりにくくてすみません。
KEKKAという項目は元のデータにはなく、この項目を生成したいです。
0332NAME IS NULL垢版2018/05/17(木) 19:41:40.74ID:???
STARTとSTOPは1件ずつしかないのか?

順序はNO順でいいのか?
NOは連番なのか?
0333NAME IS NULL垢版2018/05/17(木) 22:05:10.46ID:???
START、STOPは必ず1レコードあり、複数はない
って事なら、簡単なSQLで処理できそう
0334NAME IS NULL垢版2018/05/17(木) 22:12:42.54ID:???
>>332
STARTとSTOPは複数あります。
NO順です。
NOは連番です。
STARTが1である行とSTOPが1である行は必ず交互に来て、
STARTとSTOPが同時に来ることはありません。
STARTが1の行とSTOPが1の行は続くことがあります。
STOPが1の行の直後にSTARTが1の行が来る場合もあります。
STARTが1の行の数とSTOPが1の行の数は同じです。
NO順に先頭から見ていくと、STARTが1の行は、STOPが1の行より先に出現します。

よろしくお願いします。
0335NAME IS NULL垢版2018/05/17(木) 22:21:17.05ID:???
>>334 で何をやりたいかはだいたいわかったけど
(たぶん STARTしてからSTOPするまで KEKKAを1にすればよいはず)
行順を保持しつつ状態遷移させるのって普通のSQLでできるのだろうか?
0336NAME IS NULL垢版2018/05/17(木) 22:27:50.57ID:???
START、START、STOP、STOPって並びになったときはどうすんの?
0337NAME IS NULL垢版2018/05/17(木) 22:28:51.14ID:???
334見てなかった、すまん
0338NAME IS NULL垢版2018/05/17(木) 22:51:31.55ID:???
>>334
スタートがあったら1加算ストップがあったら1減算する累積計算すればいいじゃねえ
select no sum( start + end * -1) as kekka from t as m
left join t as s
on t.no<=m.no
group by no
0339NAME IS NULL垢版2018/05/18(金) 01:30:58.99ID:???
>>338
いろいろ細かいミスは置いといて、それSTOPの行が1にならんだろ

>>329
select NO,START,STOP,
(select isnull(sum(START),0) from t where t.NO <= m.NO)-
(select isnull(sum(STOP),0) from t where t.NO < m.NO) KEKKA
from t m
とかで出来んじゃね
0340NAME IS NULL垢版2018/05/18(金) 10:08:58.76ID:???
ありがとうございます。
皆さんに教えていただいた方法を試していますが、うまく行きそうです。
ありがとうございました。
0341NAME IS NULL垢版2018/05/18(金) 17:13:55.57ID:???
・DBMS名とバージョン
10.1.16-MariaDB

・テーブルデータ
テーブル:categories
cateid  catename   
----------------
1     c1
2     c2
3     c3
4     c4
5     c5
6     c6
7     c7
8     c8

テーブル:books
cateid  bookname price
--------------------
1     b11     20
1     b12     10
1     b13     30
1     b14     40
1     b15     5
2     b21     20
2     b22     10
2     b23     30
2     b24     40
2     b25     5


・欲しい結果
cateid   catename bookname price
--------------------------------
1     c1      b14     40
1     c1      b13     30
1     c1      b11     20
2     c2      b24     40
2     c2      b23     30
2     c2      b21     20

・説明
categoriesとbooksをcateidで結合。結合の順番はbooksのpriceの降順とし、更にその結合する数の上限を3としたいのですが、どういうSQLになりますか?

ちなみに↓のようなSQLを思いつきましたが上手く行かず・・・
SELECT *
FROM categories
    LEFT JOIN (SELECT * FROM books ORDER BY price DESC LIMIT 3) books
    ON (books.cateid = categories.cateid)
priceでのソートはできてるんですが、LIMITが期待通りには機能しませんでした
まあそれもそのはず・・・これではbooksテーブル全件の上位3件を拾ってこいというクエリですからね
0342NAME IS NULL垢版2018/05/18(金) 21:21:55.34ID:???
select
 t1.cateid, catename, t1.bookname, t1.price
from books t1
join category c on c.cateid=t1.cateid
where 3 >= (
 select count(*)
 from books t2
 where
  t1.cateid = t2.cateid and
  t1.price <= t2.price
)
order by cateid, price desc;
0344NAME IS NULL垢版2018/05/29(火) 11:29:58.81ID:???
table data_pool
code bb_date   baibai  suuryou
111  2018/04/01   3  2000
111  2018/04/03   1  1000
222  2018/04/05   3  1000
222  2018/04/09   3  2000
333  2018/05/01   3  5000

(PK code + bb_date)
baibai 1 売り 3 買い
月単位で集計するときにbaiba=1はマイナスとして集計し
111  2018/04  1000
222  2018/04  2000
333  2018/05  5000
のような結果を得たいのですがどう書けばいい?(mysql)
0345344垢版2018/05/29(火) 11:31:34.61ID:???
間違い
222  2018/04  3000
です
0346NAME IS NULL垢版2018/05/29(火) 12:22:53.17ID:x6Mfbf1/
こういう時に間違える人って
0347NAME IS NULL垢版2018/05/29(火) 12:41:29.95ID:???
おっちょこちょいなんだろうな
> baiba=1
とか書いてるし w
でも、欲しい結果をちゃんと書いてるのはいいことだと思う

MySQLはよく知らんけど
select
code,
date_format(bb_date, '%Y/%d'),
sum(
case baibai
when 1 then -suuryou
when 3 then suuryou
end
)
from data_pool
group by code, date_format(bb_date, '%Y/%d')
とかで行けるんじゃね?
0348NAME IS NULL垢版2018/05/29(火) 14:04:09.72ID:???
date_format の所、%Y/%m だな。
2カ所直せば大丈夫だろう
0349344垢版2018/05/29(火) 14:07:06.19ID:???
重ね重ねの間違いお恥ずかしいw
有難うございます
%d を %m にして欲しい結果を得ることが出来ました。感謝
0350NAME IS NULL垢版2018/05/31(木) 20:59:32.14ID:???
毎日の果物の価格を記録するデータベースを作りたいんですがどういうテーブルをつくったらいいですか?とりあえずitemsテーブルに果物の種類とidのカラムを作ります。
毎日の価格はどういうテーブルにしたらいいですか?
0354NAME IS NULL垢版2018/05/31(木) 21:21:57.55ID:???
被ってしまった、すまん
0355NAME IS NULL垢版2018/05/31(木) 21:27:38.54ID:???
>>354
ありがとうございますそっちで聞いてみます、
0356NAME IS NULL垢版2018/05/31(木) 22:01:13.46ID:???
まあどっちの住人もたいして変わらんからここでも良いとは思うけど
> 毎日の果物の価格を記録するデータベースを作りたいんです
とか意味がわからん
そのデータベースでどう言うことをしたいいのか、とかどういう結果が欲しいのかを書けよ...
0357NAME IS NULL垢版2018/05/31(木) 22:14:37.43ID:trgN2RKZ
またバカがごねとるw
0358NAME IS NULL垢版2018/06/01(金) 05:31:44.28ID:VfzZdde5
クリエ通知ってどうやるの?
0359NAME IS NULL垢版2018/06/06(水) 21:29:03.80ID:???
relatedなカラムにむこうのテーブルにないものをinsertすると勝手に登録してくれますか?
0360NAME IS NULL垢版2018/06/07(木) 14:54:12.56ID:???
しばらく考えてしまったが
やはり意味が分からなかった
誰か解説頼む
0361NAME IS NULL垢版2018/06/07(木) 15:10:39.40ID:???
リレーションで外部キーに存在しないものを挿入したら
どうにかしてくれるのかってことだべ
制約にならんと思うんだが、、、トリガで自分で追加するようにすればいけるかもね
0362NAME IS NULL垢版2018/06/08(金) 03:47:57.75ID:Ywf/F+oU
皆さんがアンケートの答えを格納するテーブルを作るとしたら
未回答は、nullを想定しますか?0を想定しますか?
理由も教えてください!
0364NAME IS NULL垢版2018/06/10(日) 09:42:21.89ID:???
>>361
on insert cascade か。他のカラムはどうすんだろ
0365NAME IS NULL垢版2018/06/10(日) 10:20:33.83ID:???
null なり default 値なりにするんだろ
0367NAME IS NULL垢版2018/06/10(日) 21:58:41.22ID:???
>>366
identity とかでいいだろ
てか insert と同じだろ
0368NAME IS NULL垢版2018/06/14(木) 13:13:32.45ID:???
自動採番のあるテーブルにインサートした場合、その番号を知るには別途selectするものですか?
0369NAME IS NULL垢版2018/06/14(木) 16:10:12.12ID:???
そもそも自動採番ってSQL標準じゃない気がするし
DBMSによるんじゃね
0370NAME IS NULL垢版2018/06/14(木) 18:37:24.82ID:???
>>368
普通は採番された番号を取得する機能が提供されてる
でないと単純なログみたいにその番号以外の部分には重複を許す列しかないと検索しようがないから
0371NAME IS NULL垢版2018/06/15(金) 10:36:36.02ID:???
>>368 です。
自分の使うデータベースで探したらありました。
自動採番ってあるの普通だと思ってたので勉強になりました。
0372NAME IS NULL垢版2018/06/17(日) 00:34:30.36ID:DF4YrmFv
こういう常時、一人しか使っていないと思っているひとは、なんなんだろうな。
0373NAME IS NULL垢版2018/06/17(日) 00:58:11.39ID:YrBEhWbQ
こういう常時、で読点打つキチガイはバカなんだろ、うな。
0374NAME IS NULL垢版2018/06/17(日) 11:52:51.97ID:???
バカだからイミフなんですね
0375NAME IS NULL垢版2018/06/19(火) 19:16:06.54ID:???
n+1問題ってなんやねん

パフォーマンス低下したら何がいけないの?
0376NAME IS NULL垢版2018/06/19(火) 19:17:03.49ID:???
何回もデータ分だけ引くの何がいけないの?
ハードが優秀なら別にいいんじゃないないの?
0377NAME IS NULL垢版2018/06/19(火) 23:22:26.54ID:NrZ3i0Js
それでええんやで
0378NAME IS NULL垢版2018/06/24(日) 19:08:35.72ID:???
助けてください。自分の力量だと解決できず

データ
日付,オーダ番号,個人名.エラーA,エラーB,エラーC
0601,00001,タナカ,エラーA発生,,
0601,00002,イトウ,,エラーB発生,
0601,00003,サトウ,,,エラーC発生
0602,00004,タナカ,エラーA発生,,
0602,00005,イトウ,エラーA発生,,
0602,00006,スズキ,エラーA発生,,

このとき、個人別にエラー回数の内訳を出したいのです。
個人名, エラー1回目, エラー2回目, エラー3回目,…
タナカ,エラーA,エラーA,,
イトウ,エラーB,エラーA,,
サトウ,エラーC,,
スズキ,エラーA,,

使用DBはMYSQLですがストアドは使えないという制約があり
エラー回数は動的に延ばせればという要望がありますが、5回で止めてもOKです。

よろしくお願いいたします。
0379NAME IS NULL垢版2018/06/24(日) 21:18:41.09ID:???
select
個人名,
max(case カラム番号 when 1 then エラー end) as エラー1回目,
max(case カラム番号 when 2 then エラー end) as エラー2回目,
max(case カラム番号 when 3 then エラー end) as エラー3回目,
max(case カラム番号 when 4 then エラー end) as エラー4回目,
max(case カラム番号 when 5 then エラー end) as エラー5回目
from (
select
個人名,
case
when not エラーA is null then 'エラーA'
when not エラーB is null then 'エラーB'
when not エラーC is null then 'エラーC'
end as エラー
row_number() over (
partition by 個人名
order by 日付 asc, オーダ番号 asc) as カラム番号
from エラー履歴
)
group by 個人名
0380NAME IS NULL垢版2018/06/25(月) 19:53:25.00ID:???
よろしくお願いします。
0381NAME IS NULL垢版2018/06/25(月) 21:07:08.21ID:???
こちらこそよろしくお願いします。
0382NAME IS NULL垢版2018/06/25(月) 22:01:22.79ID:???
>>379
ありがとうございます!できました!!!
どうしてこんなクエリが思いつくんですか。すげぇですね!
0383NAME IS NULL垢版2018/06/26(火) 16:30:55.58ID:???
質問です。
tableA
id

tableB
id, A.id

tableC
B.id, col1

のような、A-B-Cと、親-子-孫の関係で、子孫になるほど関連する行が1対多数になっていくテーブルで、

Bの1レコードにたいして、Aの情報と、Cのcol1がnullでない数の情報が欲しいのですが、
LEFT OUTER JOINでどう書けばいいでしょうか?

SELECT t1.x, t2.x, t3.nullでない数
FROM B t1
LEFT OUTER JOIN A t2
ON t1.A.id = t2.id
LEFT OUTER JOIN
(SELECT COUNT(col1) AS nullでない数 FROM C WHERE Bid = t1.id) t3
ON t3.B.id = t1.id

みたいな事がやりたいのですが、クエリはエラーになってしまいます。
0384383垢版2018/06/26(火) 16:58:48.22ID:???
FROM C WHERE Bid = t1.id) t3
の部分で、「t1はここから参照できない」みたいなエラーです。
0385383垢版2018/06/26(火) 17:50:23.15ID:???
自己解決しました
(SELECT B.id, COUNT(col1) AS nullでない数 FROM C GROUP BY B.id) t3
として、WHERE句を取ればいいだけでした

無駄な検索時間は増えてしまうと思いますが・・・
0386NAME IS NULL垢版2018/06/27(水) 01:56:23.14ID:???
>>385
カラム名を変えさせてもらった
tableB id, A_id
tableC B_id, col

select tableA.id, tableB.id,
count(C.col) as count
from tableA,tableB,
(select
B_id,
(case
when col1 is NULL then NULL
else 1 end) as col
from tableC) as C
where
tableA.id=tableB.A_id and
tableB.id=C.B_id and
C.c is not NULL
group by A_id,C.col;
0387NAME IS NULL垢版2018/06/27(水) 02:05:38.77ID:???
訂正 最後から2行目

× C.c is not NULL
○ C.col is not NULL
0388NAME IS NULL垢版2018/06/27(水) 08:42:50.79ID:???
>>383
BCを先にjoinしてカウント。その結果とAをjoin
0389NAME IS NULL垢版2018/06/27(水) 11:12:53.09ID:???
お願いします。
質問文を入力すると403 Forbiddenとなるのですが、なぜでしょう?
こういう文章は入力できるのに・・・
0390NAME IS NULL垢版2018/06/27(水) 11:16:55.56ID:???
再度質問を投稿してみます。

CREATE TABLE TB(
MM VARCHAR(81) DEFAULT ’NOTHING’ NOT NULL)

なのですが、DEFAULTで'NOTHING'が設定されていてNULLにならないと思うのですが
文末にNOT NULL制御を掛けているのはなぜなのでしょうか?
0391NAME IS NULL垢版2018/06/27(水) 12:49:39.15ID:???
>>390
> NULLにならないと思うのですが
NULLは後からでも設定できるだろ
0392NAME IS NULL垢版2018/06/28(木) 05:17:45.28ID:???
>>390
insertでカラムにnull指定すれば出来るからでは
0393NAME IS NULL垢版2018/06/28(木) 09:25:57.73ID:???
>>391
>>392
ありがとうございました!言われると恥ずかしいくらい簡単なことだったのですね。先生方、ありがとうございました。
0394NAME IS NULL垢版2018/07/02(月) 08:04:38.26ID:NPOvlBFE
1時間に1回だけ引けるガチャを実装したいんだけどどうすればいいですか?
一応、ユーザがいつガチャを引いたかを記録するテーブルを作って(不正が分かるように必須)
そこから検索かけて該当するのがあれば残り時間を返すみたいな実装を考えてます

・MariaDB 10
・user_id, time
・残り時間(引ける時はいらない)
0396NAME IS NULL垢版2018/07/14(土) 15:21:18.46ID:wB+JUIy4
条件1〜条件10のうち9個以上の条件を満たすものを抜き出したい。

select * from table1 where 条件;

の条件のところに
(条件1 AND 条件2 AND ...AND 条件10)
AND
(条件1 AND 条件2 AND ... AND 条件9 AND (NOT 条件10))
AND
(条件1 AND 条件2 AND ... AND 条件8 AND (NOT条件9) AND 条件10)
AND
...
AND
((NOT 条件1) AND 条件2 AND ... AND 条件10)

と愚直に11通り書く他に、スマートに書く方法無いの?
0397NAME IS NULL垢版2018/07/14(土) 15:48:00.68ID:???
where case when 条件1 then 1 else 0 end
   + case when 条件2 then 1 else 0 end
   ...
   + case when 条件10 then 1 else 0 end
   >= 9
0398NAME IS NULL垢版2018/07/14(土) 16:33:57.42ID:???
なるほど、CASE式を使うのか。 サンQ

ってか質問のころ、11通りを結ぶのはANDじゃなくてORの間違いだったな。
0399NAME IS NULL垢版2018/07/16(月) 18:50:59.75ID:XzzcYhc4
>>398
複数のselect文を書いてunion allの方が意図がわかりやすいうえに、条件を変えるときも変更時のリスクも低い。
0400NAME IS NULL垢版2018/07/16(月) 19:13:40.21ID:???
>>399
ちょっと具体的に書いてみ

まともな頭持ってたら書いてる途中で顔真っ赤になると思うが…
0401NAME IS NULL垢版2018/07/16(月) 19:16:01.66ID:???
>>399
条件ちゃんと読んでないのかもしれんが、複数条件つなぐのはorだぞ
ちょっとunionで書いてみてくれよ
0402NAME IS NULL垢版2018/07/16(月) 20:50:23.35ID:???
単純に、orでつないでる式を一つにしたsql文をunionすれば良いと思うのだが
0404NAME IS NULL垢版2018/07/16(月) 21:39:54.23ID:???
質問者自身にしろ、CASE使った回答にしろ、
SELECT条件で9個以上の判定をしていますが、
UNION使って列挙した場合、それぞれのSELECTが
独立してテーブルをスキャンする事になるので
仮に上手く書けたとしても効率が悪いって気がします
0405NAME IS NULL垢版2018/07/16(月) 22:51:06.23ID:5Oge9TUh
>>404
それは素人の考え方です。先の例ではSQLの見た目はシンプルそうに見えますが、実際の処理コストは高いと思われます。
0406NAME IS NULL垢版2018/07/16(月) 22:53:57.62ID:5Oge9TUh
それなりにデータベースに詳しくてもいまだにSQLはこう書くと内部でこう処理されると主張する方がいますが、それはリレーショナルデータベースの根本から否定する主張です。SQLは処理方法を指定しない非構造化言語です。
0407NAME IS NULL垢版2018/07/16(月) 23:01:38.78ID:5Oge9TUh
>>404
リレーショナルデータベースはそんなにお馬鹿ではありません。SQLの発行回数を問題視したり、SELECT句が難度も出てきたり、見た目だけでコストが高い、性能が悪いと言われて仕事でもかなりの支障をきたしますのでそういった発言は控えてください。

まずは実行計画と実際にどのように処理されたかSQLをトレースして己の知識を高めてから偉そうなことを言ってください。
0408NAME IS NULL垢版2018/07/16(月) 23:03:33.07ID:???
後の例を提示してもらった上で性能なり効率なりを評価してみましょう
0409NAME IS NULL垢版2018/07/16(月) 23:07:17.64ID:5Oge9TUh
>>408
すぐに回答を欲しがるいつものあなたですが、ここは教育スレッドではありません。

ちなみにさきほどの非構造化とは非構造化データのことではなく、構造化定義のない言語という意味です。
0410NAME IS NULL垢版2018/07/16(月) 23:12:29.73ID:???
教えてもらうスレではなく、質疑応答スレです。

>402 名前:NAME IS NULL[sage] 投稿日:2018/07/16(月) 20:50:23.35 ID:???
>単純に、orでつないでる式を一つにしたsql文をunionすれば良いと思うのだが

この人がSQL書いて提示するのを待っているところですが
0411NAME IS NULL垢版2018/07/16(月) 23:18:34.32ID:5Oge9TUh
>>397 の良くない点を挙げましょう。

SELECTが一度しか出てきませんが、WHERE句の条件を見れば、普通のプログラマはループのネストとわかるはずです。

一番の問題はそこではなく、仕様の変更に弱く保守性が低いところです。

複数のSELECT文のUNION ALLは結果セットを最後に単純に繋ぐだけで、それぞれのSELECT文が独立していますので仕様の変更が全体に影響しません。

ただし本当のところはオプティマイザの判断ですので、必ずこうなるわけではありません。
0412NAME IS NULL垢版2018/07/16(月) 23:27:47.58ID:???
評価は後の例が出てきてからで良いでしょう?
0413NAME IS NULL垢版2018/07/16(月) 23:29:52.01ID:5Oge9TUh
>>410
条件が10個もあり、そのうちの9個の条件が真の場合のSELECT文のパターンは膨大だと思うでしょう。

SELCT * FROM Aテーブル WHERE 条件パターン1
UNION ALL
SELCT * FROM Aテーブル WHERE 条件パターン2
UNION ALL




とかなり並べないといけないと思うと思います。

ただ冷静に考えてください。10個条件があり、すべての条件を満たすSELECTはひとつです。10個の条件のうち9個を満たすSELECT文は10個、10種類です。

たった11パターンのSELECT文のUNION ALLです。簡単でしたね。
0414NAME IS NULL垢版2018/07/16(月) 23:38:47.97ID:5Oge9TUh
このスレでは集合演算子がないことにしている回答ばかりです。おそらく集合演算子が使いこなせないのでしょう。

もっとシンプルに考えてください。プログラマとは思えません。

SQLを組み立てるときに頭の中でWHERE句内でどうにかしなければいけないと思い込んでいませんか?

常にSELECT文がひとつでSELECT句内でSELECT文を使う回答やWHERE句の服問い合わせでどうにかしようとする回答も多いですね。

特定の人物が回答しているのがよくわかります。その場しのぎの小手先のSQLほど迷惑なものはありません。
0415NAME IS NULL垢版2018/07/16(月) 23:38:56.00ID:???
条件パターンを例に従って具体的に書いてみてくれませんか?
そうすれば実際に性能評価ができそうですし
0416NAME IS NULL垢版2018/07/16(月) 23:43:50.42ID:5Oge9TUh
>>415
なぜ11種類の条件違いのWHERE句違いのSELECT文が理解できないのですか?

SELECTの結果を足し算、くっつければすればいい話ですので、あなたがUNION ALLを理解できないだけです。

SQLの入門書の絵でも見て勉強してください。
0417NAME IS NULL垢版2018/07/16(月) 23:45:50.92ID:???
この人NGにした方が良さそうですね?
0418NAME IS NULL垢版2018/07/16(月) 23:52:58.66ID:5Oge9TUh
UNION ALLでなくてもSELECTがひとつでないといけないルールがあるなら、WHERE句に10個の条件がすべて真、9個の条件がすべて真の条件をOR条件でつないでもかまいません。
0419NAME IS NULL垢版2018/07/16(月) 23:58:36.32ID:5Oge9TUh
条件1〜条件10のうち9個以上の条件を満たすものを抜き出したい。

select * from table1 where 条件;

の条件のところに
(条件1 AND 条件2 AND ...AND 条件10)
AND
(条件1 AND 条件2 AND ... AND 条件9 AND (NOT 条件10))
AND
(条件1 AND 条件2 AND ... AND 条件8 AND (NOT条件9) AND 条件10)
AND
...
AND
((NOT 条件1) AND 条件2 AND ... AND 条件10)

と愚直に11通り書く他に、スマートに書く方法無いの?


↑は本人も訂正していますがORの間違いでANDと書いています。さらに本人は気づいていなかったようですが「 NOT 条件 」部分はいりません。

質問者はスマートではないと言っていますが、本人がスマートではないと見た目だけで思っているだけで、まったく悪くはありません。
0420NAME IS NULL垢版2018/07/17(火) 05:22:06.92ID:???
>>413
おれなら11個も同一テーブルからのunion allとか書いてたらアホかと思うけどな
whereで11個or条件書く方がマシだわ
どっちにしても、9個以上が8個以上とか7個以上とかになったらどうするんだろうね

ああ、たんに最近union覚えて使いたいだけか

理解できてないのはお前のunionに対する実行効率だよ

まあ>>397がループのネストとか俺には意味不明だから、俺を遙かに超越した理解の持ち主なのかもしれんが
0421NAME IS NULL垢版2018/07/17(火) 06:35:01.38ID:???
環境はそれぞれだったら、いろんな方法を試したらいいんじゃない?
で、目的に一番合うもの選べば。
0422NAME IS NULL垢版2018/07/17(火) 07:11:11.28ID:???
効率云々の前にunion allとかにしたら重複行の扱いで結果異なるし
>>417が正解かと
0423NAME IS NULL垢版2018/07/17(火) 11:41:13.48ID:???
まあちゃんとnot条件書けばいちおうunionでもunion allでも同じになるんじゃね
unknownになるような条件書かなきゃな
0424NAME IS NULL垢版2018/07/17(火) 19:05:25.28ID:???
>403
どっちがスマートかと言えば、unionで繋げた方が"sql文"としてはスマートかな
0425NAME IS NULL垢版2018/07/17(火) 20:31:21.01ID:???
現実社会じゃクイズ解いてるわけじゃないんだから、アプリ側でやっちゃうだけ
0426NAME IS NULL垢版2018/07/17(火) 20:40:16.91ID:???
>>425
この例で
アプリ側でどんなクエリ発行してどんなロジックでチェックするのか教えてくれ
0427NAME IS NULL垢版2018/07/17(火) 21:16:08.13ID:???
>>424
だからSQL書いてみろって
書いてる間に顔真っ赤になるだろ w
0429NAME IS NULL垢版2018/07/17(火) 22:10:19.21ID:???
unionおじさんの次の一手は誰も言ってない要件を持ち出す、かな
0430NAME IS NULL垢版2018/07/17(火) 22:47:07.54ID:adSOPTjX
UNIONとUNION ALLはまったく別物だ。
0431NAME IS NULL垢版2018/07/17(火) 22:50:39.33ID:adSOPTjX
>>422
だから質問者のWHERE句での条件でいいのに。
なんでSQLを直すことになったらすぐにWHERE句全体が崩壊する方法を勧めるひとがいるの?
0432NAME IS NULL垢版2018/07/17(火) 22:57:06.79ID:adSOPTjX
>>422
確かにUNION ALLでは同じレコードが返ってくることには気づかなかった。
0433NAME IS NULL垢版2018/07/17(火) 23:05:43.48ID:adSOPTjX
質問者が静的SQLにこだわっている理由も気になる。10個の条件のうち9個が真という条件が激しく変化するのなら、動的SQLでSELECT文を組み立てた方が、てっとり早い。

こういう条件の場合は動的にSQLを組み立てるのが普通で、静的SQLにこだわる理由がみつからない。

こういう検索機能を動的SQLではなく、静的SQLにしようとすると、例の仕様変更に耐えられないSQLを使用しなくてはいけないなる。
0434NAME IS NULL垢版2018/07/17(火) 23:26:06.21ID:???
>>433
静的/動的は関係ないでしょ?
まあ動的に生成するなら>>396でもそんなに面倒じゃないけど>>397でなんの問題もないしな
ちな>>399は論外
0435NAME IS NULL垢版2018/07/17(火) 23:31:51.56ID:???
素朴な疑問だけど、なぜみんなUNIONを嫌うの?
0436NAME IS NULL垢版2018/07/18(水) 00:03:15.34ID:???
適切な使い方なら良いんだが、これは違うだろう
0437NAME IS NULL垢版2018/07/18(水) 02:54:15.10ID:???
この例で最悪でもテーブルスキャン1回で済ます実行計画吐くならまあunion allでもいいんじゃね
結果行数が多くなるならunionはダメだろうけど
0438NAME IS NULL垢版2018/07/18(水) 08:36:07.89ID:???
誰か最初のUNION(ALL)の手前までででいいからSQL書いてくれ
0439NAME IS NULL垢版2018/07/18(水) 12:04:56.31ID:???
言うに事欠いて1回のスキャンで済むunionとか…
0440NAME IS NULL垢版2018/07/19(木) 15:29:12.57ID:ql5n9nVD
【3.11津波は自民由来!? 安倍逮捕秒読みか!?】 ロシア国防省『日本は地震を偽装した核実験を止めよ』
http://rosie.5ch.net/test/read.cgi/liveplus/1531966541/l50



2018年、テレビが隠している大ニュース!
0441NAME IS NULL垢版2018/07/20(金) 00:47:16.08ID:qGWP8ju3
ここのキチガイは実行計画もみたことがないからな。文字数が少ないSQLがスマートと言い張る。
なんでプログラマなのに
0443NAME IS NULL垢版2018/07/20(金) 21:39:10.73ID:???
実行計画という用語を最近覚えたノロマ w
0444NAME IS NULL垢版2018/07/20(金) 23:08:59.22ID:GJRr/f3G
おまえの事やんけ
0445NAME IS NULL垢版2018/07/20(金) 23:40:11.94ID:???
なにか気に触ったのか? w
0446NAME IS NULL垢版2018/07/21(土) 07:43:39.15ID:5x2HyI6i
おまえ何時も他人の顔色うかがってばかりやな
0447NAME IS NULL垢版2018/07/21(土) 08:27:53.48ID:???
ノロマは何をやっても駄目だな w
0448NAME IS NULL垢版2018/07/21(土) 12:27:57.38ID:5x2HyI6i
おまえの事やんけ
0449NAME IS NULL垢版2018/07/21(土) 13:27:35.31ID:???
実行計画とか考慮したら、unionはないわw
0451NAME IS NULL垢版2018/07/21(土) 18:42:01.35ID:OaX/dGdR
>>449
実行計画がなんなのか分かってますか?

多少の知ったかぶりはかまいませんが、少しは謙虚にわからないことはわからないと言うようにしましょう。
0452NAME IS NULL垢版2018/07/21(土) 18:46:09.10ID:???
その実行計画をやってみたいから、早くUnion使ったSQLをここに晒してくれ
0453NAME IS NULL垢版2018/07/21(土) 18:48:49.51ID:???
unionの1回目のselectで、キャッシュに乗る
0454NAME IS NULL垢版2018/07/21(土) 18:50:04.62ID:???
それぞれのselectが異なるのに?
0456NAME IS NULL垢版2018/07/21(土) 19:22:15.63ID:???
キャッシュに乗るかどうかは実行計画とは直接は無関係だがな
キャッシュにのったからって不要なテーブルスキャンが許容できるわけではない
0457NAME IS NULL垢版2018/07/21(土) 20:00:11.00ID:???
でっかいテーブルだとキャッシュに収まるのは無理
0458NAME IS NULL垢版2018/07/21(土) 20:17:41.08ID:???
条件によってはインデックスしかアクセスしない可能性もあるしな
0459NAME IS NULL垢版2018/07/21(土) 21:13:40.08ID:???
不要なテーブルスキャン
0460NAME IS NULL垢版2018/07/21(土) 21:14:00.83ID:HTGK0eq2
>>451はアホやけどおまえらはその足下にも及ばんアホなんやで?
知らんかったやろ?
0461NAME IS NULL垢版2018/07/22(日) 02:39:53.39ID:ODcS1lTE
>>460
実行計画ではなくコストだったと間違いを認めなさい。
0462NAME IS NULL垢版2018/07/22(日) 11:27:50.93ID:zTS56Hn0
>>461
おまえが一番アホやなw
0463NAME IS NULL垢版2018/07/22(日) 19:38:32.24ID:???
条件1〜条件10のうち9個以上の条件を満たすものを抜き出したい。

テーブルは以下の内容とし、レコード件数は1万件、
cond*にはランダムに1〜100までの数値を設定し、
抽出条件は各カラム値が50を超えるものとする

create table vote (
id int primary key auto_increment,
cond01 int,
cond02 int,
cond03 int,
cond04 int,
cond05 int,
cond06 int,
cond07 int,
cond08 int,
cond09 int,
cond10 int);
0465NAME IS NULL垢版2018/07/22(日) 20:05:59.94ID:???
unionにだけorder byあるとか
やるならちゃんとやって

まあunionはたいがいの場合でソートするんだが
unionの押しの人はunion allって言ってなかったっけ?

どうせならインデックスの有無も
0466NAME IS NULL垢版2018/07/22(日) 20:43:15.80ID:???
case whenはそのままid順になるけど、unionはならなかった
union all使えば重複の除外が発生するし、変わらないんじゃない?
index付けてもunion内のsql実行に影響するだけで、
マージする性能には多分影響しない

続きは各自で
0467NAME IS NULL垢版2018/07/22(日) 21:05:02.26ID:???
>>466
ただのunion はdistinctで重複除去、除去しないのがall指定
この例でunion allだと重複行がでるはずだぞ

caseはID順(おそらく主キーか物理格納順)でテーブル舐めてるからそのままID順だな
unionで順番変わるってことは、重複除去の方法がソート系じゃない可能性が高い
まあなんにしても、order by書かないと順番は不定ってのが原則なので
両方に書くか両方に書かないか合わせないと

indexは、unionの各whereには効くだろうけど、caseにはうまく効かないんじゃないかと
まあそれで実行性能がひっくり返るとしても、unionで書こうとは思わんが
0468NAME IS NULL垢版2018/07/22(日) 22:25:29.43ID:???
>>464
ごめん9は間違いで8以上だったSQL直してくれる?
0469NAME IS NULL垢版2018/07/23(月) 07:46:29.52ID:???
sql自体でなくて申し訳ないが,前の例で、10億レコードで,テーブルが列ストアで保持されているとした場合、whereでー発フィルタリングするのと、unionするのとどっちが効率的なのだろう?
条件が適用されるカラムのメンバー数にもよりそうな気もするが、どんなもんなんでしょうか
0470NAME IS NULL垢版2018/07/24(火) 19:21:58.65ID:yAzT+3qO
やってみればいいのに。見た目がシンプルなのと処理の重さは反比例する。
0471NAME IS NULL垢版2018/07/24(火) 21:25:13.19ID:???
見た目で決まるほど今のオプティマイザはアホじゃないし
0472NAME IS NULL垢版2018/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 NULL垢版2018/07/27(金) 13:33:09.67ID:???
一部つかえるDBMSもあるようだが原則使えない
0474NAME IS NULL垢版2018/07/27(金) 18:03:08.40ID:???
普通はselect句でつけた別名を使えるのはorder by句だけだな
0475472垢版2018/07/27(金) 18:21:36.74ID:???
そうだったんですね
できそうなイメージだったんですが
ありがとうございます
0476NAME IS NULL垢版2018/07/27(金) 22:18:42.27ID:???
いい加減使えるようにしろよとは思う
0477NAME IS NULL垢版2018/07/27(金) 22:54:00.11ID:???
select a + b +c -d as 計算結果
having 計算結果 > 0
0478NAME IS NULL垢版2018/07/28(土) 13:12:09.25ID:tm98Iqt0
>>475
よく考えてくれ。WHERE句が先に評価され、そのあとにSELECT句の選択リクトが評価される。

いったんSELECTした結果に対して、絞り込みのWHERE句つきSELECTを再度するのを基本としてしまうと、SELECT文は常にフルテーブルスキャンをして、その結果を一時的に保管して、保管した結果に対してさらに検索することになる。
0479NAME IS NULL垢版2018/07/28(土) 13:13:33.29ID:tm98Iqt0
>>471
だから見た目をシンプルにするのは意味がないと言っているのだが?
0480NAME IS NULL垢版2018/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 NULL垢版2018/07/28(土) 14:05:45.09ID:???
>>479
>見た目がシンプルなのと処理の重さは反比例する
反比例ってどういうことだ?
基本的にはシンプルなSQLほどオプティマイザの裁量が広がって有利なんだが
0482NAME IS NULL垢版2018/07/28(土) 15:08:24.77ID:???
>>478
この場合はどっちにしても全行計算してから絞り込むから大差ないような・・・
0483NAME IS NULL垢版2018/07/28(土) 15:12:20.21ID:???
>>478
ああ一時テーブルのメモリと、捜査が2度手間になるのか
whereが先だったのか
どっかのサイトにselect結果をwhereで絞り込むって書いてたけど
0484NAME IS NULL垢版2018/07/29(日) 09:18:12.72ID:???
ちょっと前のunionの話だけど
処理効率や保守性はおいといて、10個の条件のうち9個を満たすものをとるのにunion使ってどうやるの?
0485NAME IS NULL垢版2018/07/29(日) 09:28:13.30ID:???
それを書いた本人の真意はわからんけど、

(1番目以外の9個を満たすクエリ)
union
(2番目以外の9個を満たすクエリ)
union
:
でできるはず。
0487NAME IS NULL垢版2018/07/29(日) 09:46:11.97ID:???
ごめん、保守性はおいといてって言ったの自分だね
たしかにそのやり方ならできるか
0488NAME IS NULL垢版2018/07/29(日) 09:52:42.06ID:???
自分なら union 化して
where x.cond > 条件 group by id having count(*) > 件数
を副問合せにする
0489NAME IS NULL垢版2018/07/29(日) 10:21:47.78ID:???
>>485
unionだけだと元は異なるレコードでも結果が同じだったら1レコードにされちゃう
かと言ってunion allだと複数の条件にヒットするレコードが複数出ちゃうよ
0490NAME IS NULL垢版2018/07/29(日) 10:52:46.82ID:???
>unionだけだと元は異なるレコードでも結果が同じだったら1レコードにされちゃう

主キーが存在しないテーブルならともかく、適切なselectリストにすりゃいいだけ。

>かと言ってunion allだと複数の条件にヒットするレコードが複数出ちゃうよ

(1番目を満たさずそれ以外の9個を満たすクエリ)でおk。
0491NAME IS NULL垢版2018/07/29(日) 14:29:08.48ID:???
なんでいまさら話をループさせてるんだ
0492NAME IS NULL垢版2018/07/29(日) 19:49:38.36ID:0RlqY4hk
>>491
ここに常にいるキチガイ
0493NAME IS NULL垢版2018/08/21(火) 16:31:56.98ID:???
(プライマリではない) authorがaaaとbbbの最新のレコードをそれぞれ1件ずつ取得したいのですが
どのようにしたらいいでしょうか? 最新かどうかは updated_at で判定できます

SELECT * FROM news WHERE author IN ('aaa', 'bbb')
0494NAME IS NULL垢版2018/08/21(火) 17:41:25.74ID:???
>>493
もう少し詳しく書いて欲しい
テーブル定義と、updated_atでどうやって判定するのかなど
0496NAME IS NULL垢版2018/08/21(火) 21:30:01.28ID:KIn4MzQg
MySQLでREPLACE関数を使って複数行を置換するにはどうすればいいのでしょうか?

例えば「body」というカラムがあるとして以下の値が登録されているとします。
あいうえお
かきくけこ
さしすせそ

これをREPLACEして「さしすせそ」のみ残したい時、

UPDATE news SET body=REPLACE(body,"あいうえお\r\nかきくけこ\r\n","")

としたのですが、置換できません。
0497NAME IS NULL垢版2018/08/21(火) 21:57:14.63ID:???
>>496
出来ると思うんだが、出来ないとしたら
bodyの文字列中改行コードが、
replace関数で指定したものと違っているのかも知れない。
0498NAME IS NULL垢版2018/08/22(水) 01:37:20.21ID:???
>>497
\nにしても駄目でした。一行だけだと置換できるんですけどね・・・
0499NAME IS NULL垢版2018/08/22(水) 01:59:39.45ID:???
>>498
select hex(body) from table名
とやって、
改行部分を16進数で見てみるとか
0500NAME IS NULL垢版2018/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 NULL垢版2018/08/30(木) 23:59:48.61ID:???
すいません。DB2でフラッシュバッククエリのコマンドを実行したいのですが、
ググってもOracleのコマンドしか出てきません。
どなたかご教授お願いします。
0504NAME IS NULL垢版2018/08/31(金) 14:35:48.08ID:???
そっちのスレは過疎ってますし、そもそも回答になってませんが・・・
0505NAME IS NULL垢版2018/08/31(金) 14:57:35.99ID:???
ここは特定のDBMLの操作方法を質疑するスレじゃないので
0506NAME IS NULL垢版2018/08/31(金) 18:08:53.87ID:???
DB2にフラッシュバッククエリなんかないでしょ
ぐぐるとOracleのLogMinerみたいな機能ですら
db2ReadLog APIを使って自分で実装しろと出てくる
0507NAME IS NULL垢版2018/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 NULL垢版2018/09/01(土) 16:24:39.15ID:???
>>507
エラー回数は最大2ではなくNなわけ?
かりにNだった場合SELECT句はどうするつもり?
0509NAME IS NULL垢版2018/09/01(土) 18:48:49.07ID:???
エラー回数は有限で3回までです。
accessがtempテーブルも使えず、実体テーブルにselect into しても
それだけなのに、2万件で1時間近くかかってしまっています。
助けてください。。。今日そのことばかり考えながら家事をしていました。つらい
0510NAME IS NULL垢版2018/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 NULL垢版2018/09/01(土) 19:31:19.34ID:???
抽出クエリってやつは実テーブルじゃなくて何かの条件で抽出した状態のビューを言ってるわけ?
それとDBがアクセスってだけでSQL自体は外部ツール(C#とか)から実行するの?
0512NAME IS NULL垢版2018/09/01(土) 19:32:05.22ID:???
適切なスレが見当たらないんで、ここで聞くんだけど
sqlから、ER図を生成する方法ってある?
できればoracleで。
イメージ的には、プログラミングで言うと
ソースコードからクラス図を生成するイメージ
0513NAME IS NULL垢版2018/09/01(土) 19:35:46.49ID:???
>>510
ありがとうございます。
実テーブルに入れるというところで30分以上かかってしまい。
select だけだと1分程度で抜けるのが、insert selectでも select insertでも
30分かかってしまって、その後にクエリ流すのに時間が掛かってしまっています。

>>511
from 句の中に書いたサブクエリになります。
アクセスに対して、エクセルのVBA側から呼び出しをかけています。
0514NAME IS NULL垢版2018/09/01(土) 19:39:12.73ID:he6NSwN/
>>512
SQLってDDL分ってこと?
実態テーブルからER作成するのは
有償ツールはいくつかあるけど
とりあえずA5とかで試して見たら?
https://a5m2.mmatsubara.com/help/ER/
FKとか指定してないとさすが無理だけど
0515NAME IS NULL垢版2018/09/01(土) 19:59:08.40ID:???
>>514
DDLではなく、普通のselect分です。
DBにつながる環境で、FKとかはDBから拾ってきてほしい想定です。
実テーブルから、ER図ではなく、
実テーブルと、select分から、ER図を作ってほしい
0516NAME IS NULL垢版2018/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 NULL垢版2018/09/01(土) 20:00:42.02ID:???
エラー内容ってカラムが実は1つのテーブルから複数もってくるけどはしょられたら破綻するけどね
0518NAME IS NULL垢版2018/09/01(土) 20:13:28.57ID:???
>>516
これはデータ件数が多いと時間かかりそう
レコード1件ごとカラムのサブクエリが実行されるだろう
0519NAME IS NULL垢版2018/09/01(土) 20:30:03.52ID:???
>>518
おれもそうおもったんだよね
抽出テーブルがサブクエリだとなおさらだな

2万件っていってるのは元データが2万なのか、
氏名で出力する行が2万件なのか(2万×最大3列=6万)なのかで結果がかわるけど、
どっちなんだろな
0520NAME IS NULL垢版2018/09/01(土) 20:58:07.07ID:???
>>516
ありがとうございます。今一番早く出来たのがその形で、それで1時間掛かっています。

抽出対象が2万件。
そのそれぞれに最大3列、エラーが発生し得る状態です。

サブクエリで抽出している下記のデータは、30万件ほどから抽出していて
氏名,エラー内容.エラー回数
A,ダメポ,1
A,無理ぽ,2
B,もうだめ,1
C,むり,1
抽出もとは最終的に100万件ほどまで増えます。

30万件から抜くクエリは1分程度なので、×3でいけると思っていたら1時間掛かるようになってしまい。
0521NAME IS NULL垢版2018/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 NULL垢版2018/09/01(土) 22:05:12.33ID:4FUN7IZm
いまなんの話題?3行で
0524NAME IS NULL垢版2018/09/01(土) 23:00:11.61ID:???
>>521
状況をきちんと伝えられていなくて申し訳ないです。

30万行の元データ→エラー回数抽出サブクエリ(@ 件数は2万件程度抽出)→エラー回数を列別変換(A)
という流れです。

@は1分程度で1クエリは抽出完了、Aは1時間掛かってしまっています
当初>>510のように作っていましたが、処理を見直し>>516のようなクエリに書き換えています。
@は分析クエリのように演算で回数を出しています。
0525NAME IS NULL垢版2018/09/02(日) 03:03:08.10ID:???
>>524

>>510が正解じゃない?
インデックス効かせるには。
書き込み時間がかかるかもしれないけど。

最終結果の使い方わかんないけど
VBAとかで2万件結果セットループで変数持ちとかじゃだめか。
0526NAME IS NULL垢版2018/09/02(日) 07:52:34.77ID:???
>>524
> @は1分程度で1クエリは抽出完了
@の結果をアプリ側で整形するってのはできないの?
SQLは行列変換得意じゃないし
0527NAME IS NULL垢版2018/09/02(日) 09:56:31.15ID:???
>>525-526
他のDB情報と最終的に結合して出力するためできればクエリでやりたいと思っていました。
ただ、どうしても時間が掛かるならVBA側で実装するのもありですね。

もう少し性能測定して、改善の見込みが無かったらVBAに乗り換えてみます。
諸々失礼しました。
0529NAME IS NULL垢版2018/09/02(日) 18:52:28.60ID:???
実テーブルから定義を引ければ十分だと思うけど、なぜselect文が必要で
>>514じゃ何が足りないのか、質問の意図が誰も理解できないんだと思う。
0530NAME IS NULL垢版2018/09/02(日) 22:22:42.98ID:???
>>514 に書かれてるようにFKないんじゃね?
join の結合条件見ろと
0531NAME IS NULL垢版2018/09/03(月) 03:08:13.74ID:xugX4t13
>>496
なんでreplace関数を使わなきゃいけないのか?

where句の条件が あいうえお、かきくけこ で SET句の値が さしすせそ でいいだろ。
0532NAME IS NULL垢版2018/09/03(月) 23:51:22.93ID:???
>>531
さしすせそは不定で指定できないとか。
最初の2行はヘッダーとか特定できるなにかなんじゃないかな。

>>496
ちなみにxampp5.6.12でテストしたら>>496のクエリでできたよ。

命令送ってる側とかで勝手に改行コード省かれちゃってるとか?

サーバーでログとってみたら?
0533NAME IS NULL垢版2018/09/04(火) 13:40:14.68ID:Md9f/krD
>>532
MySQLと質問者は書いているのに、なんでXAMPPという何をどう使っているのかわからないくくりで答えているのか?
0534NAME IS NULL垢版2018/09/04(火) 13:45:29.38ID:Md9f/krD
改行コードを含む文字列の置換を言っているのか。単に改行コードがSQLの改行コードとみなされるような環境で発行してねえだろうなw
0535NAME IS NULL垢版2018/09/04(火) 20:40:30.85ID:???
質問者もMySQLとしか書いてないので環境がよくわかんないから
とりあえずMySQL使ってればなんでもいいかとおもって。
0536NAME IS NULL垢版2018/09/15(土) 02:10:48.09ID:???
個人からの申請で、登録、変更、削除を受け付けます。
その時、変更だけしか申請していない人を抽出するSQLはどう書いたらいいですか。

変更と登録、変更と削除など、他の申請を出した人は除いて変更だけの人を抽出したいです。
0537NAME IS NULL垢版2018/09/15(土) 02:23:19.42ID:???
>>536
そのDBシステムで、
受け付けた登録、変更、削除をどう扱っているか次第
0538NAME IS NULL垢版2018/09/15(土) 12:40:37.04ID:???
>>536
そのテーブルのカラム名すらも書けないんならSQLいじるの止めたほうが良い
0539NAME IS NULL垢版2018/09/15(土) 13:28:08.11ID:???
>>536
個人Id | 申請
------+-----
001 | '登録'
002 | '登録'
001 | '変更'
002 | '削除'
003 | '変更'
で003だけ欲しくてSQL-Server使ってるとエスパー
select 個人Id from テーブル where 申請 = N'変更'
except
select 個人Id from テーブル where 申請 <> N'変更'
0540NAME IS NULL垢版2018/09/15(土) 17:44:40.73ID:RSsWpwqw
監査の話かと思った
0541NAME IS NULL垢版2018/09/15(土) 18:18:49.96ID:dWsaBm9G
>>539
「SQL Server」を「SQL-Server」と書きたい理由を教えてくれ。
0542NAME IS NULL垢版2018/09/15(土) 20:31:26.68ID:Cd4+ZhgT
【ちびまる子、乳ガン】 モー娘がヒキ逃げなら  <急に基準変更して逃走>  トー電はベク逃げかな
http://rosie.5ch.net/test/read.cgi/liveplus/1536979182/l50


関東の子供が、東電にベク逃げされて、棺桶が売れてる!
0544NAME IS NULL垢版2018/09/16(日) 06:31:37.33ID:znPzt7LE
製品名は変換する目的は何か?
0545NAME IS NULL垢版2018/09/16(日) 08:31:26.77ID:???
お前みたいな日本語怪しいやつをあぶり出すため
0546NAME IS NULL垢版2018/09/18(火) 15:27:23.99ID:dZAMkAe5
固有名詞を改変したら駄目だろう
0547NAME IS NULL垢版2018/09/18(火) 23:19:39.80ID:EwCoq+cp
ええやろw
0549NAME IS NULL垢版2018/09/19(水) 11:22:26.10ID:SAO4z521
半角スペース恐怖症なんだろうな。
0550NAME IS NULL垢版2018/09/19(水) 19:30:55.56ID:???
誰でも間違いはある
気にするな
0551NAME IS NULL垢版2018/09/19(水) 21:03:38.93ID:f2yuv0SC
製品名を正しく書けないやつはたいてい危険人物。だいたいよくわかっていない。
0552NAME IS NULL垢版2018/09/19(水) 23:26:57.94ID:UE0WOPkY
なんやこの病的すぎるバカw
0553NAME IS NULL垢版2018/09/20(木) 08:02:36.86ID:???
内容に突っ込めないから製品名に突っ込むしかないんだろ
どうでもええわ
0554NAME IS NULL垢版2018/09/21(金) 14:45:01.05ID:wlRN+aGs
お客相手に間違えなくて良かったじゃないか
0555NAME IS NULL垢版2018/09/21(金) 15:39:47.79ID:???
ところで、IDが出てたり出てなかったりするのは何故?
0556NAME IS NULL垢版2018/09/21(金) 21:51:00.56ID:???
>>554
そんなもんを気にしてるお客なんてお前の脳内にしかいないけどなww
0557NAME IS NULL垢版2018/09/21(金) 21:52:53.93ID:???
>>555
sageかどうかでしょ
そもそもsageてない奴のレスは見る価値ないし
0558NAME IS NULL垢版2018/09/21(金) 22:45:10.80ID:LJZuek3J
責任をとりたくない奴は、IDを隠すってこと
0560NAME IS NULL垢版2018/09/21(金) 23:43:14.92ID:J7Fz2JlS
図星に脊髄反射しとる奴、おる?
0562NAME IS NULL垢版2018/09/22(土) 13:24:41.08ID:/G0Wh7Kz
>>557
いまどき上げ下げかw
0563NAME IS NULL垢版2018/09/22(土) 19:23:47.16ID:???
sageるのって荒らしに見つからんようにとかそんな理由だったっけ?
今だと勢い順か新しい順、あるいはスレ検索して見るからもう完全に意味ないよな、わざわざ荒らすやつも激減してるし
ましてこんな過疎版じゃ気にするだけ無駄
0564NAME IS NULL垢版2018/09/22(土) 20:12:24.86ID:???
質問スレだと、質問者は必ずageてって板もある
ID出た方が成りすましを防げるからやり取りで
混乱しなくて良いと言う側面もある
0565NAME IS NULL垢版2018/09/23(日) 10:30:22.73ID:???
質問スレはそんなルールあったね
sageるとID出ないのはDB板の仕様か
技術的な話をするんだから一律IDつけたほうが勝手がいいと思うけどなあ
専ブラがデフォルトsageになってていちいち削除すんのもめんどいし
0566NAME IS NULL垢版2018/09/29(土) 20:35:17.15ID:W8T9QA3v
質問するのでIDありで・・・
リレーショナルデータベース=JOINで複数のテーブルをまたいでクエリを投げられる

という意味?
0567NAME IS NULL垢版2018/09/29(土) 20:51:07.76ID:???
リレーションってのは要はテーブルだ。
リレーションでできているデータベースだからリレーショナルデータベース。
0568NAME IS NULL垢版2018/09/29(土) 21:24:57.55ID:W8T9QA3v
レスありがとう。
リレーショナルではないデータベースというのは、テーブルでは無いデータベースが想像つかないな・・・。
二次元的なものではなく、テキストに羅列されているだけという感じだろうか。
昔pc-98で桐ver2とか名前だけは知っていたけど、あの頃はすでにテーブルという概念があったのかしら?
0569NAME IS NULL垢版2018/09/29(土) 21:34:54.80ID:9EBEb433
すごい会話だなw
0570NAME IS NULL垢版2018/09/29(土) 21:36:14.75ID:9EBEb433
>>568
自作自演?
0571NAME IS NULL垢版2018/09/29(土) 21:38:54.14ID:???
>>568
桐もDBASEもリレーショナルデータベースだな
テーブルであるならそうかといえば、ちょっと違う

複数のテーブルを関係性で紐付けが出来るなら
リレーショナルデータベースと呼んで良いと思う

Excelの表はテーブルだけど誰もそうは呼ばないしな
0572NAME IS NULL垢版2018/09/29(土) 22:03:17.34ID:???
情報処理試験とかデータベースの勉強をすれば初めの方で説明されているはずだけど、
リレーショナルの前には階層型やネットワーク型といったデータベースの形式があった。

ついでに言えば、リレーショナルデータベースには「複数のテーブル」などという要件はない。
複数のテーブルはその直積である1テーブルと等価なんで。
0573NAME IS NULL垢版2018/09/29(土) 23:12:42.69ID:9EBEb433
なんか変な素人が出てきたなw
0574NAME IS NULL垢版2018/09/29(土) 23:27:01.69ID:???
普通はRDBMSと言えばリレーショナルデータモデルを表現できるだけでなく
ACID特性を備えるのが必要条件とされる
最近流行りのNoSQLなんかはリレーショナルデータモデルを表現するものではない上に
ACID特性のいずれかを満たさないのが普通だったりする
0575NAME IS NULL垢版2018/09/29(土) 23:29:52.65ID:9EBEb433
NoSQLが最近ものだと?

タイムマシンで過去から来た人間の書き込み?
0576574垢版2018/09/30(日) 00:54:24.60ID:???
しまった
自ら正解を出すことはできず文句しか言わない人に絡まれてしまった
0578NAME IS NULL垢版2018/09/30(日) 09:28:56.36ID:???
おまえらが知る前から俺は使ってるんだ( ・`ー・´) +
0579NAME IS NULL垢版2018/09/30(日) 14:41:59.34ID:???
>>574
RDBとDBMSの区別がつかないなら、ややこしくなるだけだから黙っとけな
0580NAME IS NULL垢版2018/09/30(日) 22:46:54.70ID:???
プライマリキーをフォーリンキーにすることはできますか?
0581NAME IS NULL垢版2018/10/01(月) 00:24:20.26ID:???
できるが変な設計だなとは思う
0582NAME IS NULL垢版2018/10/01(月) 12:38:28.99ID:???
>>581
時系列データのテーブルが2つあって
時間をフォーリンキーにしたいんですけどおかしいですか?
0583NAME IS NULL垢版2018/10/01(月) 12:51:24.62ID:Q6K7qC3N
>>580
単に1対1のテーブルだからおかしくはない。
0584NAME IS NULL垢版2018/10/10(水) 11:28:56.03ID:???
インデックスが使われるSQL文の書き方というのは、例えば出庫データに
商品コード順+出荷日順+伝票番号順というインデックスを作っておいて
SELECT * FROM 出庫データ WHERE 商品コード='A01' ORDER BY 商品コード, 出荷日, 伝票番号
みたいにするとレスポンスが速くなるということでしょうか?
0585NAME IS NULL垢版2018/10/10(水) 21:59:19.97ID:G1VCUlYl
>>584
プラス記号の意味がよくわからんが
CREATE INDEX(商品コード,出荷日,伝票番号)
という複合主キーを作成すると
例示のSQLは速くなるだろうが
ただしインデックスの順序と異なる
ORDER BY 出荷日,商品コード
などと場合は効かない
0587NAME IS NULL垢版2018/10/11(木) 23:22:18.86ID:LDSiJwGe
>>584
忠告しておくが、インデックスが使われるSQLを書くのではなくて、問い合わせの内容とインデックスが必要かどうかを考えてSQLを書く。

SQLがこうだから、このSQLはこのインデックスが使われるとSQLだけでは言いきれない。
0588NAME IS NULL垢版2018/10/11(木) 23:32:44.06ID:ppvirY+z
>>586
複合主キーじゃないわ複合インデックスね

>>587の言うように
実際に効くかどうかは実行計画で決まるので
インデックスを使ったかどうかは
実際の実行計画を取得しないとわからない
オプティマイザが意図したインデックスを使ってくれない場合
ヒントで特定インデックス使用を強制することもDBMSによっては可能
0591NAME IS NULL垢版2018/10/14(日) 20:22:51.35ID:???
 私たち日本人の、日本国憲法を改正しましょう。
『憲法改正國民投票法』、でググってみてください。
(へいわ)は、勝ち取るものです。拡散も含め、お願い致します。
0592NAME IS NULL垢版2018/11/01(木) 06:26:01.46ID:imTVWlJr
質問です。
以下のようなテーブルがあったとします。
id|name
------
0|aaa
1|bbb
2|ccc

aaa,bbb,ddd,eeeを呼び出し側から与えて、nameにない項目(dddとeee)を取得したいです。
こういう場合どのように書けばよいでしょうか。
擬似的にaaa,bbb,ddd,eeeの項目をテーブルのように扱えればできそうですが、やり方がわかりません。
SQLiteを使っていますが、汎用的な書き方でできればしたいです。
よろしくおねがいします。
0594NAME IS NULL垢版2018/11/01(木) 11:56:15.87ID:???
汎用的には、テーブルを作ってしまうのが良いと思う
0595NAME IS NULL垢版2018/11/01(木) 12:45:48.88ID:pgw6fBBH
SELECT
a.empno<br />
,a.ename
,a.job
,b.ename AS 'mname'
FROM
emp a
,emp b
WHERE
a.mgr = b.empno;
このようなSQLを書いたのですが、SELECTのAS句が機能しません。どうすれば機能しますか?
0597NAME IS NULL垢版2018/11/01(木) 14:17:52.92ID:imTVWlJr
意見ありがとうございました。
汎用的なのは諦めて、SQLiteでは以下で疑似的なテーブルができるようなので、これをもとにSQLを考えていこうと思います。
WITH t(name) AS (SELECT * FROM (VALUES ("aaa"), ("bbb"), ("ddd"))) SELECT * FROM "t";
0598NAME IS NULL垢版2018/11/01(木) 19:59:14.73ID:vMwdzdp/
>>595
行頭に,を書く悪習はいいかげんヤメロ
0599NAME IS NULL垢版2018/11/01(木) 21:02:02.93ID:???
行頭に,を書くとどういう問題があるんだ?
0600NAME IS NULL垢版2018/11/01(木) 21:32:48.31ID:vMwdzdp/
>>599
ヴィジュアル的に認識しにくい
0602NAME IS NULL垢版2018/11/02(金) 09:06:50.55ID:???
>>599
見た目にブサイク
(個人の感想です)
0603NAME IS NULL垢版2018/11/02(金) 09:48:07.02ID:???
膨大なカラム数があって、スクリプトで処理しているときには都合が良いかもしれないが、
手作業で編集する分にはどっちでもいい気がする
0604NAME IS NULL垢版2018/11/02(金) 12:32:46.28ID:c/Fx/3hC
コードは読むもんだと教わらんかったんかおまえら?
ヴィジュアル問題の大切さがいまいちわかっとらんな
0605NAME IS NULL垢版2018/11/02(金) 13:13:36.22ID:DS+sU5kd
前カンマの方が打ち忘れが減るので
自分はこちらのヴィジュアルが合っているらしい
0606NAME IS NULL垢版2018/11/02(金) 19:10:39.71ID:ckbyV4Q5
それヴィジュアルちゃうやんw
0607NAME IS NULL垢版2018/11/02(金) 19:39:46.15ID:???
前にカンマの方がコメントアウトする時に楽
0608NAME IS NULL垢版2018/11/02(金) 22:38:08.71ID:ckbyV4Q5
だからヴィジュアルちゃうやんそれ
しかもどっちゃでも変わらんしw
0609NAME IS NULL垢版2018/11/02(金) 22:53:44.45ID:???
カンマの忘れとか、余分なカンマとか、割とよくやるw
0610NAME IS NULL垢版2018/11/03(土) 03:58:33.81ID:Pv5mB3Rz
最近JSONとか末尾カンマ無視するのあるよね
あれ導入されれば後ろでもいいんだけどな
前の方が行カット&ペーストで入れ替えやすい
0611NAME IS NULL垢版2018/11/03(土) 09:51:12.69ID:JBJEgXB4
前カンマの方が綺麗だと思うけどなあ
カンマと列名の間にタブなりスペースなり入れてカンマの位置を揃えるの
テキストエディタで矩形選択を使ってごりごり編集するのに便利なのだ
0612NAME IS NULL垢版2018/11/03(土) 10:58:19.38ID:???
人の好きずきの問題をここで語られても
0614NAME IS NULL垢版2018/11/04(日) 12:09:42.60ID:???
書式整形ソフト使って好きな形で読め。
--のコメントさえなければSQLは改行なし
で書けるんだから読むやつが好きに整形しろ。
ここで個人の好みの書式の話しされると
うざい!!
0615NAME IS NULL垢版2018/11/04(日) 12:23:08.21ID:???
ちょっと難しい問題を出してみて
そうしたら、多分静かになるから
0616NAME IS NULL垢版2018/11/11(日) 17:44:06.06ID:DVzqXgBV
そもそもカンマがいらなかったんだよな。

英文っぽくしたためにカンマ区切りにしてしまった。

列名の区切りは半角スペースか改行でよかった。
0617NAME IS NULL垢版2018/11/23(金) 19:38:48.29ID:NImj8hV3
質問させてください。
使っているのはSQLite(Python)です。

あるテーブルに、たとえば性別、血液型、職業というカラムがあって、
それぞれ、男、A、会社員、などと、データが入っているとします。
これら3つのカラムの中身について、テーブル内にある組み合わせの
パターンをすべて抽出したいのですが、sqlでどのように書けば効率がよいでしょうか?

抽出後、(男、A、会社員)は何名、(女、A、会社員)は何名、、、と
集計することが目的です。テーブルにより起こる組み合わせが様々なので、
都度調べる必要があります。

単純にFor文で1行ずつ調べて、過去にない組み合わせであれば外部のリストに
追加する形だと、非効率な気がしています。
良い方法があればお教えください。
0619NAME IS NULL垢版2018/11/23(金) 20:05:35.29ID:???
>>617
こうじゃないか

select `性別`,`血液型`,`職業`, count(*) as `人数`
from `テーブル`
group by`性別`,`血液型`,`職業`;
0620NAME IS NULL垢版2018/11/24(土) 03:57:01.05ID:???
効率悪いし、何名か?が取れないと思う
0622617垢版2018/11/24(土) 12:35:17.12ID:???
>>619

ありがとうございます。
助かりました。
0623NAME IS NULL垢版2018/11/24(土) 16:31:58.75ID:Pyo9iAE3
再び質問です。
教えてもらった

select `性別`,`血液型`,`職業`, count(*) as `人数`
from `テーブル`
group by`性別`,`血液型`,`職業`;

で得られる'人数’を同じテーブル内の別カラムに保存したいと思い、
カラムは事前に作成しておいて、

update 'テーブル' set '人数のカラム' =
(select `性別`,`血液型`,`職業`, count(*) as `人数`
from `テーブル`
group by`性別`,`血液型`,`職業`)

としてみたのですが、group byの最後のグループのcountの結果が
全部の行に上書きされてしまいます。

各行毎に所属するグループの人数を記録するにはどう書けばよいでしょうか。

(目的は、その人(各行)の所属するグループの人数を個別に保存することです。)

よろしくお願いします
0624NAME IS NULL垢版2018/11/24(土) 17:14:07.61ID:???
>>623
> 各行毎に所属するグループの人数を記録するにはどう書けばよいでしょうか。
> (目的は、その人(各行)の所属するグループの人数を個別に保存することです。)
そんな設計やめなよ…
レコードに追加/削除/更新する度にその人数も更新しないとだめだし
毎回求めてもよほどでかい表でない限りは問題にならないだろ
0625NAME IS NULL垢版2018/11/24(土) 17:28:12.86ID:???
>>623
使用意図はわからんが、どうしても一時的にテーブルに保存したきゃUPDATEじゃなくて、DELETE→INSERTでよくね?
オイラならテーブル変数使うけど
0626NAME IS NULL垢版2018/11/24(土) 17:32:36.45ID:???
>>624

コメントありがとうございます。
実はモデルをすり替えて質問していまして、
データを書き換えての繰り返し計算に使いたいのです。

その後、order by でなく、select以下のテーブルをtable as Tなどとしてwhere句で’テーブル’とTの要素が等しい時に限定したら一応できました

何故かブロックされたのでスマホから
0627NAME IS NULL垢版2018/11/24(土) 17:49:44.47ID:Pyo9iAE3
>>625
使用意図は、エクセルの表計算のように、
左のカラムにデータがあって、それを元に
右の方のカラムに途中計算を書いていって、
最後に得られた結果の誤差が減るように
また最初の方から計算を繰り返すような感じです。

1巡の計算が大きすぎて記録を残したいのですが、ご指摘の通り、記録が不要なところはテーブル変数がよさそうです
勉強してみます
0628NAME IS NULL垢版2018/11/24(土) 17:50:56.49ID:???
オレ多分頭悪いんだろう
>>626 で何を言っているのかよく分からない

愚直に>>623の要求通りのものを書くとすれば
`テーブル`に`人数`カラムを追加したとして
update `テーブル` t1 set
`人数` = (
select `人数` from (
select `性別`,`血液型`,`職業`, count(*) as `人数` from `テーブル`
group by`性別`,`血液型`,`職業`
) t2
where
t1.`性別` = t2.`性別` and
t1.`血液型`= t2.`血液型` and
t1.`職業` = t2.`職業`
);

でも、こんなこと実際にはしないし、
もっと良い方法が必ずあるはずだし
見直した方がいい
0629NAME IS NULL垢版2018/11/24(土) 18:02:53.98ID:Pyo9iAE3
>>628

626が意味不明で申し訳ないです。
書かれておられるように自分もwhereで
比較しました。

計算は各行に対してするのですが、
それが所属するグループの平均等の計算値も
途中計算で何度もつかうのです
それで、各行にそれを入れておきたいのです

なんだか変な事をやってるみたいで恐れ入ります
0630NAME IS NULL垢版2018/11/24(土) 18:07:07.78ID:???
結局何をしたいのかさっぱり理解できないけどわざわざ違うモデルで答えさせるとか失礼な事するやつだからスルーしとくわ
0631NAME IS NULL垢版2018/11/24(土) 18:18:02.74ID:???
質問をシンプルにしたくてモデルを
変えましたが、失礼と思われたようで
済みません
0632NAME IS NULL垢版2018/11/24(土) 18:26:04.19ID:???
わざわざスルーするって宣言してる奴なんだからスルーでいいよ
0633NAME IS NULL垢版2018/11/24(土) 21:20:38.92ID:???
合計値も平均値も割と簡単に計算出来ますし
それをテーブルに入れた方が良いのか
それともDBを見ているミドルの方で計算させた方が良いのか
全体の仕組みと性能で総合的に考えた方が良いかもしれません
0635NAME IS NULL垢版2018/11/26(月) 21:45:52.63ID:???
mysql,mariadbでmyisamが非推奨になったのはなぜですか?
innodbではbeginやcommitが使えるそうですが、メモ的なデータをinsertするぐらいなのですが、
それでもinnodbを使った方がいいのでしょうか?
0636NAME IS NULL垢版2018/11/26(月) 22:42:16.59ID:???
そういうのは各RDBのスレがあるんだから、そこで聞けよ
0638NAME IS NULL垢版2018/11/27(火) 03:05:52.60ID:???
専用スレがあったのですね、誘導ありがとうございます。
0640NAME IS NULL垢版2018/11/29(木) 10:10:36.91ID:???
以下のようなデータがあった場合、
name date rate
AAA 11/1 2000
BBB 11/1 900
CCC 11/1 500
DDD 11/1 700
AAA 11/2 2000
BBB 11/2 1200
CCC 11/2 500
DDD 11/2 700
AAA 11/3 2000
BBB 11/3 500
CCC 11/3 1500
DDD 11/3 700

最新のrateが1000未満だけを抽出するにはどうすればよいでしょうか?
DDD 11/3 700
BBB 11/3 500
0641NAME IS NULL垢版2018/11/29(木) 11:07:44.82ID:???
>>640 こうかな?
select name, MIN(date), rate
from hoge
where rate < 1000
group by name, date, rate
0642641垢版2018/11/29(木) 11:26:02.69ID:???
違った、こうか?
select a.name, a.date, a.rate
from hoge as a,
(select name, MAX(date) from hoge where rate < 1000 group by name, date) as b
where a.name = b.name and a.date=b.date;
0643NAME IS NULL垢版2018/11/29(木) 13:04:58.18ID:???
SELECT * FROM a WHERE (name,date) IN (SELECT name,MAX(date) FROM a GROUP BY name) AND rate<1000
0644NAME IS NULL垢版2018/11/29(木) 13:09:17.80ID:???
>>642
レスありがとうございます。
試したのですが、fromのselectでMAX(date)以外のも全て列挙されてしまいます。
DDD 2018/11/01 00:00:00
BBB 2018/11/01 00:00:00
CCC 2018/11/01 00:00:00
DDD 2018/11/02 00:00:00
CCC 2018/11/02 00:00:00
DDD 2018/11/03 00:00:00
BBB 2018/11/03 00:00:00
ちなみに使用DBはpostgresqlです。
0645NAME IS NULL垢版2018/11/29(木) 13:14:19.05ID:???
>>643
おお!できました!!
ありがとうございます!
整理して理解します。
0646NAME IS NULL垢版2018/11/29(木) 16:31:32.41ID:???
こういうときに色々意地悪な条件をついつい考えてしまう
最新日って言う場合、1件だけになるのか、
それとも同一日は全部該当にするのか
結果表示に時刻まで出てきていると悩んでしまう
その後の処理で何を使いたいかにもよるんだろうけど
0647NAME IS NULL垢版2018/11/29(木) 23:50:24.51ID:0rvo1ya5
>>646
ここで質問してくるやつはいつも仕様などあまり考えていない。
0648NAME IS NULL垢版2018/12/03(月) 19:05:02.42ID:???
2つの文字列カラムがあり、一方がもう片方の文字列から始まるものだけを抽出したい場合どうすればいいですか?
str1 str2
ABC ABCDEF
DEF aiu
GHI GHIxxx
JKL akasa
の場合、
ABC ABCDEF
GHI GHIxxx
0649NAME IS NULL垢版2018/12/03(月) 20:36:59.12ID:???
>>648
str1の長さがstr2より短いことがわかってるなら
where left(str2, len(str1)) = str1
でいいかと
0650NAME IS NULL垢版2018/12/03(月) 22:05:33.10ID:???
ためしてないけど、
where (str1 like str2+'%') or (str2 like str1 + '%')とかでどうだろう
0651NAME IS NULL垢版2018/12/03(月) 22:51:42.17ID:???
>>648
んじゃ他ので
WHERE PATINDEX(str1 + '%', str2) = 1
0652NAME IS NULL垢版2018/12/04(火) 10:41:43.68ID:???
>>649>>650>>651
お三方、ありがとうございました。
ばたばたしてて遅くなりましたが、確認できました。
0654NAME IS NULL垢版2018/12/04(火) 11:59:27.62ID:KJK6oDpE
大丈夫。ただ+が使えるのはMS系だな。
後は使えるやり方に読み換えて
0655NAME IS NULL垢版2018/12/09(日) 16:50:28.29ID:???
SQL SERVERのSQL文について質問です

【条件】
1.全てのテーブル内容を取得
2.@ABのM_CODEとS_CODE、CのM_CODEとS_CODEが一致したNAMEを取得

一つのSQL文で完結できると助かります
以上の内容でご教示お願いします


@Table1
ID | M_CODE | S_CODE | 内容
--+----------+-----
01 | 1 | 1 | a
02 | 1 | 2 | aa
03 | 1 | 3 | aaa
04 | 1 | 2 | aaaa

ATable2
ID | M_CODE | S_CODE | 内容
--+----------+-----
01 | 2 | 1 | ab
02 | 2 | 2 | abb
03 | 2 | 3 | abbb
04 | 2 | 2 | abbbb

BTable1
ID | M_CODE | S_CODE | 内容
--+----------+-----
01 | 3 | 1 | ac
02 | 3 | 2 | acc
03 | 3 | 3 | accc
04 | 3 | 2 | acccc

CCode
M_CODE | S_CODE | NAME
--+----------+-----
1 | 1 | サッカー
1 | 2 | 野球
1 | 3 | バスケット
2 | 1 | バナナ
2 | 2 | リンゴ
2 | 3 | オレンジ
3 | 1 | サバ
3 | 2 | カツオ
3 | 3 | マグロ
0656NAME IS NULL垢版2018/12/09(日) 18:37:50.56ID:???
1,2,3をuionして4とjoinすればいいんだろうけど,何んでこんな設計?
0657NAME IS NULL垢版2018/12/09(日) 18:58:36.79ID:???
欲しい結果がよくわからん

4に1〜3をJOINするだけじゃダメなのか?
0658NAME IS NULL垢版2018/12/11(火) 21:37:14.11ID:???
この板誰も人いないけど、他にデータベースの話題扱う場所あるの?
0659NAME IS NULL垢版2018/12/12(水) 07:07:27.08ID:???
ここはSQLの板だから
DBは別にあるだろ
0660NAME IS NULL垢版2018/12/14(金) 13:53:33.51ID:???
スレはSQLだが、ここはデータベース板
0661NAME IS NULL垢版2018/12/17(月) 17:59:53.76ID:???
Oracle 12cでのSQLに関する質問です。

2つのDATE型のカラムの差をhh:mm:ssで出力したいです。


開始日が2018/12/13 7:00:00
終了日が2018/12/17 17:30:30
だとして、この2つの差(経過時間)の出力結果は
106:30:30
と出したいのですが、出来るだけ簡単に計算して出す方法ありますでしょうか?
(時・分・秒でそれぞれ分解して掛け算して計算する方法がネット上にありましたが、もう少しシンプルにできないか模索しています。)
良い御知恵がありましたらご教示お願い致します。
0662NAME IS NULL垢版2018/12/17(月) 18:56:46.00ID:???
質問です。
製品のメジャーバージョン、マイナーバージョンという2列があり、
メジャーバージョンが最大の中から、
マイナーバージョンも最大の行を取り出すにはどうしたらいいでしょうか?

postgresql9です。
0663NAME IS NULL垢版2018/12/17(月) 19:37:22.24ID:???
>>662
postgresql9手元で動かせません。MariaDBです
テーブル名はproductと仮定しました

select * from product
where (major_ver,minor_ver) in (
select major_ver,max(minor_ver)
from (
select major_ver,minor_ver
from product
where major_ver = (select max(major_ver) from product )
) as t
);
0664NAME IS NULL垢版2018/12/18(火) 00:22:00.75ID:???
>>663
なるほど。メジャーの最大グループからマイナーの最大を取った where in句ですか
ありがとうございます。
0665NAME IS NULL垢版2018/12/18(火) 01:53:40.53ID:???
window関数使うともっと綺麗に書ける気がする

俺はwindow関数苦手だから書けないが
0666NAME IS NULL垢版2018/12/18(火) 23:18:20.88ID:d1jtTCeB
>>661
あんたはDATE型が文字列だとでも思っているのか?
0667NAME IS NULL垢版2018/12/27(木) 14:42:38.04ID:???
a. 顧客テーブル(顧客コード, 顧客名)
b. 商品テーブル(商品コード, 商品名)
c. 売上テーブル(売上日, 顧客コード, 商品コード, 売上数)

売上日, 顧客名, 商品名, 売上数

このように結果が表示されるSQL文を教えてください
0668NAME IS NULL垢版2018/12/27(木) 15:25:29.94ID:???
何か基本のキって感じ
これが書けないとヤバいと思う
0669NAME IS NULL垢版2018/12/27(木) 15:29:31.60ID:???
こういうのって内部と外部とどっちで繋ぐのがよろしいの?
それとも、JOINではなくWHERE内でキーを繋いであげればいいの??
0671NAME IS NULL垢版2018/12/27(木) 19:28:59.29ID:???
まだ書かれていない要求仕様があるんじゃない?
読み取れる範囲だとどっちでも良いように思う
0672NAME IS NULL垢版2018/12/28(金) 01:38:09.32ID:???
>>667
select 売上日, 顧客名, 商品名, 売上数
from 売上テーブル
inner join 顧客テーブル on 顧客テーブル.顧客コード=売上テーブル.顧客コード
inner join 商品テーブル on 商品テーブル.商品コード=売上テーブル.商品コード

>>669
FROMに複数テーブル書いてwhereに結合条件書くのは今は推奨されない
内部か外部かは、商品テーブルにない商品売ってたり顧客テーブルにない顧客に売ってたりしない限りどちらでも同じ結果
どっちでもいいなら普通は内部結合にするんじゃね
0673NAME IS NULL垢版2018/12/28(金) 08:19:26.48ID:???
>>672
ありがとうございます
メモしておきます
0674NAME IS NULL垢版2018/12/28(金) 16:26:23.93ID:???
外部キーがあればinnerなければleft joinかな
0675NAME IS NULL垢版2018/12/28(金) 22:03:16.91ID:???
このなかで一番美人なのって真ん中だよね?深キョンレベルだと思うのだが
ちなみに向かって右は目も鼻も整形してるって本人が公言してるけどそれ抜きにして誰が一番美人だと思う?
http://bigsta.net/media/1933567086757747003_3564907098
0677NAME IS NULL垢版2018/12/29(土) 10:58:20.71ID:???
>>672
そうなのか、勉強になったわー。
講習受けたときはJOINで教わったのに、実際にWHEREで書かれたの使ってる人たちがいて何でだろうと不思議だったんだけど、
歴史的な表記ぶれみたいなもんなんだな。
商品登録がない商品を売ってる可能性とかも全然思いつかなかった。
0678NAME IS NULL垢版2018/12/29(土) 11:00:50.31ID:???
>>674
外部キー無いけど繋ぐって、どんなシチュエーション??
0679NAME IS NULL垢版2018/12/29(土) 19:17:07.38ID:/5Z8+3Hw
>>677
結合条件をFROM句にしたのは標準SQL。ただ構文が長ったらしいのは失敗だった。
0680NAME IS NULL垢版2018/12/29(土) 19:20:03.23ID:/5Z8+3Hw
>>672
推奨されない?

そんな嘘を書くな。

製品によって結合条件の構文の一部が非推奨になっただけ。
0681NAME IS NULL垢版2018/12/29(土) 19:21:06.30ID:/5Z8+3Hw
>>677
上の世代からするとなんでFROM句に書きたがるのか疑問なんだよ。
0682NAME IS NULL垢版2018/12/30(日) 09:09:04.13ID:???
どのテーブルにも脳死したかのように
createdとupdatedっていうtimestampなカラムがあるんですが普通なんですか?

都道府県テーブル
id 県名  作成日 更新日
1 北海道 2018略 2018略
2 岩手県 2018略 2018略

こんな具合に定数のような項目にもあります
0683NAME IS NULL垢版2018/12/30(日) 10:10:04.61ID:???
>>681
結合の条件なのか検索の条件なのかが分かりやすいからだろ
0684NAME IS NULL垢版2018/12/30(日) 10:21:46.45ID:???
Whereに結合条件書くと順番が制御できないから外部結合で結果が不定になることがあるってのがあったな
0685NAME IS NULL垢版2018/12/30(日) 10:43:00.11ID:???
>>682
テーブル設計の基本ルールとして定めていることは特に珍しくはないと思う
本当に必要か?という議論をすることは可能だが
どっちに転んでも誰も得をしないので誰も言い出さない
0686NAME IS NULL垢版2018/12/30(日) 11:02:25.62ID:BcIhhlay
>>682
マスタこそあった方がええで
0687NAME IS NULL垢版2018/12/30(日) 11:30:39.57ID:???
普通かどうかよりも、テーブル設計書を見た方が良いかと
0689NAME IS NULL垢版2019/01/04(金) 14:56:54.45ID:/aoZaVbi
>>683
それを言い出すとWHERE句が不要になる。絞り込み条件もFROM句に書けるし、若い人間で知識がないとひとつのテーブルでレコードを絞り込んで結合させた方がいいなどと言い出して、全部FROM句に行ってしまう。
0690NAME IS NULL垢版2019/01/04(金) 14:57:46.66ID:/aoZaVbi
>>684
根本的にSQLをわかっていない。SQLの書き方で処理が決まるわけではない。
0691NAME IS NULL垢版2019/01/04(金) 15:01:34.82ID:/aoZaVbi
>>682
自分がシステムのテスト、運用・保守をしていたらわかるよ。複数人でテストをし始めたら、誰がいつ作ったのか、誰がいつ更新したのかわからなくなり、チーム作業が成立しない。
0692NAME IS NULL垢版2019/01/04(金) 15:15:54.95ID:???
>>690
>SQLの書き方で処理が決まるわけではない
から、そのときの実行計画次第で結果か変わるって話だけど?
意味わかってレスしてる?
0693NAME IS NULL垢版2019/01/04(金) 16:00:36.58ID:???
where句に結合条件を書こうとすると外部結合のとき困るよな
Oracleは(+)を使ってwhere句で外部結合が今でもできるけど推奨してない
SQL Serverでも似たような演算子が昔あったけどもうサポートされてない
0694NAME IS NULL垢版2019/01/04(金) 16:24:03.25ID:???
from句は、集合を作る処理で、where句とselect句で選択範囲を決定しているんだろ?
0695NAME IS NULL垢版2019/01/04(金) 16:47:25.40ID:/aoZaVbi
>>692
製品は人間の感覚を意識して実装されているが、SQLの仕様ではない。
0696NAME IS NULL垢版2019/01/04(金) 16:52:31.34ID:???
>>694
RDBの教科書的に言えば直積(from)→選択(where)→射影(select)だな。
0697NAME IS NULL垢版2019/01/04(金) 19:11:32.12ID:???
>>695
SQLの仕様的に不定な結果を除去できないから推奨しないって話をしてたんだけど

製品ってなに?SQLが人間の感覚を意識して実装されてるって?
3値論理とか、不定な結果とかが感覚的なのかよ。常人とは違う感覚もってるらしいな
0698NAME IS NULL垢版2019/01/05(土) 00:09:10.98ID:apNAc+7p
言うことはわかるが、具体的にどの製品のデフォルト設定を想定しているのか?

外部結合の構文は、どの製品も標準SQLの構文にも対応するが、個々の製品の独自拡張もまた進んでいる。

あなたの言うことで気になるのが、実行計画によって結果がかわるという点で、そんなポンコツ製品は使わない方がいい。
0699NAME IS NULL垢版2019/01/05(土) 00:13:44.83ID:???
議論するときはID表示にするかトリップ付けてくれよ
誰が何を言っているか追いかけられない
0700NAME IS NULL垢版2019/01/05(土) 05:00:54.33ID:???
>>698
製品がポンコツなんじゃなくて、SQLのあいまいさの問題
まあ俺もかなり信じられなかったからな
実例もどっかで見たんだが見当たらん

AとBを外部結合したものにCを外部結合するのと、
BとCを外部結合したものにAを外部結合するのとでは結果が変わる
whereでの外部結合ではこの違いを表現できん、てな話だったはず

from A,B,Cと書くと、感覚的には前者で処理されると思い込むが
事項計画次第で後者で処理されることもあり得るって話だったはず
0701NAME IS NULL垢版2019/01/05(土) 08:11:08.17ID:???
>>700
OUTER JOINが導入される前の外部結合は製品毎の独自拡張なんだから
そこにあいまいさがあるならその製品の問題になるでしょ。
それともOUTER JOINにまだ曖昧さが残っているということ?
0702NAME IS NULL垢版2019/01/05(土) 20:01:36.96ID:???
>>701
だからwhereでの結合は推奨しないって話じゃないのか
0703NAME IS NULL垢版2019/01/05(土) 20:54:38.32ID:???
「だから」ってのはどこに係ってるの?
>>684が言っているように結果が不定になるというのはどの製品のことかって話なんだけど。
0704NAME IS NULL垢版2019/01/06(日) 11:15:47.69ID:LccedoWX
>>700
外部結合の条件が書かれていない。結合条件が異なるから結果が変わるのを実行計画の違いだと思っているのか?
0705NAME IS NULL垢版2019/01/06(日) 15:33:10.43ID:???
>>703
たしかオラクルだったはず
今探しても見当たらん。結構トリッキーなSQLではあった気がするんだが
原理的にwhereで外部結合すればどのDBMSでも起こり得るはずで特定製品の話ではないんだが

>>704
まったく同じSQLで結果が変わる事があるから不定って言うんだけど

まあ俺はwhereで結合する事はそれ以来やめたからもうどうでもいいや
実例だせない時点で説得力低そうだしな
0706NAME IS NULL垢版2019/01/06(日) 16:02:53.03ID:???
Oracleなら、解釈があいまいになりそうな記述は最初から弾かれたと思うが。

>原理的にwhereで外部結合すればどのDBMSでも起こり得るはずで特定製品の話ではないんだが

原理的もなにも、SQL標準のfromとwhereだけではそもそも外部結合を表現することはできないんで
各製品が独自に拡張していたわけ。そこに問題があるなら当然その製品の問題。
ってのは上で何度も指摘されているんだが。
0707NAME IS NULL垢版2019/01/10(木) 02:55:12.86ID:OduNBQgg
ヒカキンの年収が10億超え!?明石家さんま・坂上忍も驚愕の総資産とは??
https://logtube.jp/variety/28439
【衝撃】ヒカキンの年収・月収を暴露!広告収入が15億円超え!?
https://nicotubers.com/yutuber/hikakin-nensyu-gessyu/
HIKAKIN(ヒカキン)の年収が14億円!?トップYouTuberになるまでの道のりは?
https://youtuberhyouron.com/hikakinnensyu/
ヒカキンの月収は1億円!読唇術でダウンタウンなうの坂上忍を検証!
https://mitarashi-highland.com/blog/fun/hikakin
なぜか観てしまう!!サバイバル系youtuberまとめ
http://tokyohitori.hatenablog.com/entry/2016/10/01/102830
あのPewDiePieがついに、初心YouTuber向けに「視聴回数」「チャンネル登録者数」を増やすコツを公開!
http://naototube.com/2017/08/14/for-new-youtubers/
27歳で年収8億円 女性ユーチューバー「リリー・シン」の生き方
https://headlines.yahoo.co.jp/article?a=20170802-00017174-forbes-bus_all
1年で何十億円も稼ぐ高収入ユーチューバー世界ランキングトップ10
https://gigazine.net/news/20151016-highest-paid-youtuber-2015/
おもちゃのレビューで年間12億円! 今、話題のYouTuberは6歳の男の子
https://www.businessinsider.jp/post-108355
彼女はいかにして750万人のファンがいるYouTubeスターとなったのか?
https://www.businessinsider.jp/post-242
1億円稼ぐ9歳のYouTuberがすごすぎる……アメリカで話題のEvanTubeHD
https://weekly.ascii.jp/elem/000/000/305/305548/
世界で最も稼ぐユーチューバー、2連覇の首位は年収17億円
https://forbesjapan.com/articles/detail/14474
0709NAME IS NULL垢版2019/01/19(土) 19:14:46.35ID:???
>>708
>>35で[KEY]を"KEY"にすれば標準SQLになると思う
IDが予約語のDBもあると思うが標準では予約語じゃない
0711NAME IS NULL垢版2019/01/19(土) 19:44:11.08ID:???
row_number()使わないでやってみた

SELECT "TableA".*,"TableB"."ID2","TableB"."DATA" FROM "TableA"
LEFT JOIN (
SELECT "ID",MAX("KEY") AS "KEY" FROM "TableB" WHERE "KEY"<=2 GROUP BY "ID"
) AS a ON "a"."ID"="TableA"."ID"
LEFT JOIN "TableB" ON "TableB"."ID"="a"."ID" AND "TableB"."KEY"="a"."KEY"
ORDER BY "TableA"."ID"
0713NAME IS NULL垢版2019/01/19(土) 23:58:53.77ID:???
>>711
検証してみたんですが、
TableBに(8,2,3,'b_key3')を追加し、検索KEY=3にした時、
一番若いKEY=1を持って来れてません
0714NAME IS NULL垢版2019/01/20(日) 02:34:11.35ID:???

2より若いじゃ無くて2が無ければ一番若いKEYなのかな
KEY=3,4,5の場合3になる?
0715NAME IS NULL垢版2019/01/20(日) 02:37:14.35ID:???
なんかSQL貼り付けようとすると書き込みに失敗する
何故だ
0717NAME IS NULL垢版2019/01/20(日) 08:31:23.78ID:???
>>33みたいに場合分けを含むようなのは素直にunion allでやる方が見通しが良かったりする。
記述は冗長かもだけど。
0719NAME IS NULL垢版2019/01/23(水) 08:44:06.11ID:???
>>718
最初、>>716の16行目以降のSELECT文を書き込もうとしたら失敗したのよ
>>711だと書き込み成功してるのに何故だろうか?
どの部分が問題になっているか知ってる?
0720NAME IS NULL垢版2019/01/24(木) 23:55:34.12ID:???
チェックは途中のクラウドで行っているようです
SQLの特定のキーワードに反応しているみたい
引っかかるときもあれば引っかからないときもある
その辺の基準はよく分からないです
チェックする検査項目が変わるのかもしれない
0721NAME IS NULL垢版2019/01/25(金) 19:17:24.19ID:???
>>720
ありがとう

書いてみてエラーになったら外部サイトに貼るしかないか
0722NAME IS NULL垢版2019/01/25(金) 20:20:44.91ID:???
手間だけど、それが一番良いと思う
後は全角文字に置換して貼り付けるくらい
汚くはなるけど、説明と合わせて書きたい時は
こうすると良いかな
0723NAME IS NULL垢版2019/01/30(水) 21:50:00.13ID:faG5je+8
初めて質問させていただきます
SQLからPostgresへのデータ移行をC#使ってプログラム作ってます
csv吐き出しで移行させたいんですが、ダブル型のカラムのデータが.000や10.600という形で入ってるのですがどうにか0にする・余計な0を無くすことが出来るのでしょうか?
またそういう事が吐き出しの際指定出来るのでしょうか?
吐き出しはbcpでフォーマットを読ませてます
0724NAME IS NULL垢版2019/01/30(水) 22:08:09.72ID:???
FORMAT()関数とか言うのがあるんじゃねぇの?よく知らんけど
0725NAME IS NULL垢版2019/01/31(木) 14:53:40.26ID:kxiPGIi/
>>723
SQL ServerのことをSQL

CSVファイルのデータをわざわざC#でインポートプログラムを作ってインポート

エクスポートや出力にあたる言葉が「吐き出し」

初心者なのかクソ経験者なのか?
0726NAME IS NULL垢版2019/01/31(木) 20:03:35.35ID:???
>>725
自己解決しました
申し訳ない急ぎだったのでそういう書き方になってしまった
C#は移行という一貫性のあるプログラムです
SQL serverからPostgresへの移行と書いてあるように
目的の為の柔軟性もあるという意味合いで情報を付加しただけに過ぎないです
0727NAME IS NULL垢版2019/01/31(木) 21:14:34.97ID:kxiPGIi/
文字でデータを移行するのに数値型のデータをどう表現するのか指定を行っていない時点で初心者。
0728NAME IS NULL垢版2019/01/31(木) 21:18:44.70ID:???
>>726
どういう風に解決したのか書いておいて
0729NAME IS NULL垢版2019/02/01(金) 06:34:24.99ID:???
>>727
吐き出しはbcpでフォーマットを読ませてます
>>728
問題は別にありました
思いっきりbcp時にNULL文字の空白が…と警告が書いてあるのにも関わらずNULLIFでRTRIM関数を使用していないことが原因でした
ちなみに.000は0には出来ませんでしたがコンバートで代用しました
0730NAME IS NULL垢版2019/02/01(金) 09:44:22.12ID:???
根本的にアプローチ方法が違う様な気がする
山に登るのも好き好きだから
逆立ちして登りたい人もいるだろうし
0732NAME IS NULL垢版2019/02/01(金) 11:48:19.88ID:???
SQLパズルって本どうなの?実務で役に立つ?
0734NAME IS NULL垢版2019/02/01(金) 13:43:15.56ID:LPFd6PpO
今度はbcpの使い方を知らなかったということか。何もかもダメだな。
0735NAME IS NULL垢版2019/02/01(金) 14:28:44.76ID:???
bcpの使い方ってよりbcpの相互関係に気付けなかっただけだろ
0737NAME IS NULL垢版2019/02/10(日) 12:16:31.44ID:???
auto incrementって指定しなくても勝手に連番いれてくれないの?
0738NAME IS NULL垢版2019/02/10(日) 12:45:17.83ID:???
多義的質問で回答が難しい
0739NAME IS NULL垢版2019/02/10(日) 12:47:26.67ID:???
autoincrementのカラムを何も指定しないでinsertしても入らないのですか?
0740NAME IS NULL垢版2019/02/10(日) 13:20:09.88ID:???
それは無理だろう
作成時に指定した制約の範囲で値は入る
0741NAME IS NULL垢版2019/02/10(日) 13:42:14.39ID:???
じゃあ空のテーブルに1から連番のidを入れたいときどうしますか?
0742NAME IS NULL垢版2019/02/10(日) 14:00:53.96ID:???
取得時に連番を振れば良いので、そもそもの要求が正しくないと考えるべきだな
0744NAME IS NULL垢版2019/02/10(日) 15:01:33.42ID:???
>>742
取得時?自分で連番を入れろってこと?
>>743
postgresqlです
0745NAME IS NULL垢版2019/02/10(日) 15:05:49.46ID:???
データベースってどういう仕組みなの?一つのテーブルにファイルどれくらい使ってるの?
0747NAME IS NULL垢版2019/02/10(日) 17:54:40.38ID:RVblbfO4
>>741
必ず連番でないといけないか、まずはそこを考えた方がいい。
0748NAME IS NULL垢版2019/02/10(日) 18:22:16.70ID:6fMC7oP8
>>744
同時実行時にどうやって連番が振れるのか考えた方がいい。

ユーザーがよく連番にしてくれというが、データそのものが連番を持っている必要はない場合が多い。

シーケンスを使うと歯抜けになるが、歯抜けで何か問題がどうか聞け。

どうしてもやりたければ、番号を管理するテーブルを用意して、一瞬、テーブルをロックして最大値を求めてレコードを追加したり更新したりすることで実現する。

レコードが削除されたときは番号を降り直すのかどうかも事前に聞け。

ユーザーは単に表示されている件数とデータの番号が一致していたら、わかりやすい程度のことしか言っていない。
0750NAME IS NULL垢版2019/02/10(日) 20:11:17.09ID:???
>>746
これが何なのか読んでもわからんすw
というかORM使ってるのでこの型使えるのだろうか
>>747
>>748
確かに連番である必要は無いです
適当に被らない番号を振ってもらえれば良いんだけどそういう句はあります?
0751NAME IS NULL垢版2019/02/10(日) 23:07:57.76ID:???
>>750
どういうやり方で最初の空のテーブルを作成してますか?
0752NAME IS NULL垢版2019/02/11(月) 04:27:17.82ID:XERbxblT
>>750
シーケンスを作って、シーケンスから新しい番号を取る。

製品によって異なるから「PostgreSQL シーケンス NEXTVAL」のキーワードでくぐって勉強して。
0753NAME IS NULL垢版2019/02/11(月) 23:07:27.20ID:I14UVxY+
>>751
CREATE TABLE prices (
id INTEGER,
date DATE NOT NULL,
market_price INTEGER,
nav_price FLOAT,
retrieval_date DATE,
PRIMARY KEY (date)
)

というSQL です。id をインクリメントしたいんですが 

>>752
ググっても使い方がwかりませんでした
0754NAME IS NULL垢版2019/02/11(月) 23:12:13.51ID:XERbxblT
だめだこりゃ
0755NAME IS NULL垢版2019/02/11(月) 23:43:33.61ID:???
>>752
質問をいくつか

idを連番にして一意にしたいって事ですか?

dateをプライマリキーにしていますが、
このテーブルデータのデータを一意に特定したいときに
dateを指定するって事ですか?
0756NAME IS NULL垢版2019/02/12(火) 13:36:18.57ID:eWsZ2mFu
>>755
dateとは?
0757NAME IS NULL垢版2019/02/12(火) 17:33:47.98ID:???
date DATE NOT NULL,
PRIMARY KEY (date)
0758NAME IS NULL垢版2019/02/12(火) 19:40:53.09ID:???
>>746の回答で終わってる話だし、自分で調べる気がないようだから
これ以上構わないほうが良いぞ
0759NAME IS NULL垢版2019/02/12(火) 21:40:34.30ID:hyYi05zW
>>755
date で一意にしたいです

>>758
つまりカラムの型をSEREALにすれば良いんですね PRYMALY KEYにしか使えないんですね
0760NAME IS NULL垢版2019/02/13(水) 00:29:25.04ID:???
何をしたいのかがよく分からないけれど
率直に言うと、テーブル定義を見ただけで、これは酷いと思った
ここで質問するにしても基本が出来ていないと
質疑そのものが成り立たないと思う
一つ一つ教えてやれるほど暇な人はここにはいないと思うので
まず自力でテーブル設計の基本から学び直した方が良いだろう
0761NAME IS NULL垢版2019/02/13(水) 01:28:24.13ID:bwrqc7Ol
う〜ん厳しいっすね、
達人に学ぶDB設計指南書
という本を読んで出直してきます
ありがとうございました。
0762NAME IS NULL垢版2019/02/13(水) 11:26:56.25ID:???
教えてください。
12c ってWindows10Homeには対応していないのでしょうか?
インストールしようとすると、最初の段階でフリーズしてそのままなんですが。。。
それとも自分のやり方が間違っているのか?
0763NAME IS NULL垢版2019/02/13(水) 12:26:16.60ID:???
> それとも自分のやり方が間違っているのか?
Yes.

Oracleに聞け
0764NAME IS NULL垢版2019/02/13(水) 16:28:18.68ID:RDoKqAmg
>>762
Windows 10 Homeには対応していません。Windows 10 HomeはIT技術者が使うようなものではありません。
0765NAME IS NULL垢版2019/02/13(水) 19:12:25.52ID:???
Windows10でも64ビット版なら対応してるみたいだな
0766NAME IS NULL垢版2019/02/13(水) 23:53:03.82ID:???
おいおい、そもそも12cってなんだ?
0767NAME IS NULL垢版2019/02/14(木) 00:13:36.28ID:???
>>762
Win10Home x64 に Oracle12c 入れてるよ
Release2 だと言うように途中で止まったけど Release1 は最後まで行った
0768NAME IS NULL垢版2019/02/14(木) 00:51:18.49ID:rVmZaTkp
動くのとサポートしているかどうかは別問題。
0769NAME IS NULL垢版2019/02/14(木) 00:52:15.11ID:rVmZaTkp
こういう勝手な組み合わせで使って文句をサポートに言ってくる会社は必ずある。
0770NAME IS NULL垢版2019/02/14(木) 00:53:47.16ID:rVmZaTkp
>>766
視力検査で「みぎ」と言えば視力1.2と判断される。
0772NAME IS NULL垢版2019/02/15(金) 18:52:16.64ID:BQV0WL9f
基本情報の古い過去問のデータベースが解けません。解説してください。
平成18年度春期 基本情報 問1 空欄c 答えは「ア」
https://www.jitec.ipa.go.jp/1_04hanni_sukiru/mondai_kaitou_2006h18_1/2006h18h_fe_pm_qs.pdf

SELECT 社員ID FROM 社員表
WHERE 年齢 < ALL(SELECT 年齢 FROM 家族表
WHERE 家族表.社員ID = 社員表.社員ID)

副問い合せ、相関副問合せは理解しています。
副問合せの結果リストが0行の場合、なぜ<ALLの条件が成立してしまうのかわかりません。
oracleの環境で試してみたところ >ALL でも =ALL でも、副問合せの結果リストが0行の場合、真となるようでした。
よろしくおねがいします。
0773NAME IS NULL垢版2019/02/15(金) 19:58:39.46ID:slwoR7Dy
>>772
ALLは真偽値を返すのではなく、副問い合わせの結果すべてに当てはまるかどうかの条件構文。
0774NAME IS NULL垢版2019/02/15(金) 20:05:16.74ID:slwoR7Dy
>>772
結果リストがゼロ件の場合は、FALSEでもNULLでもTRUEでもないため、条件そのものがない扱いになる。
0775NAME IS NULL垢版2019/02/15(金) 20:11:56.83ID:slwoR7Dy
正確には結果が返らないため、どの年齢もTRUEになってすべてのレコードが対象になる。
0776NAME IS NULL垢版2019/02/15(金) 20:14:08.31ID:slwoR7Dy
SELECT文の結果の対象レコードが存在しない状態はNULLではない。
0777NAME IS NULL垢版2019/02/15(金) 21:29:59.00ID:???
>>772
ALLはその副問い合わせが空のときはTrueと決まってるから
イマイチ直感的ではないけど、そう決まってるからしょうがない

条件そのものが無い扱いになったりするわけじゃない
ALL条件はTrue/Falseを返す(この場合はTrue なぜならそう決まっているから)
0778772垢版2019/02/18(月) 09:17:02.02ID:Vl1v2yYD
皆さんありがとうございました。よく分かりました!
0779NAME IS NULL垢版2019/02/22(金) 21:56:20.09ID:???
MySQLの使い方に悩んでる。
WebアプリケーションでToDoリスト作るとして
ToDoリストのデータとして5つのテーブルが必要です。
Aさん、Bさん、Cさんがそれぞれ保存し、各自、自分が登録したToDoのみが見れます。
このような場合、SQLサーバでは、Aさん用データベース、Bさん用DB、Cさん用DBを作成する。
という使い方は変ですか?
0780NAME IS NULL垢版2019/02/22(金) 21:58:20.75ID:???
>>779
補足、使用人数は例では3人ですが、100人以上の可能性あり
0781NAME IS NULL垢版2019/02/22(金) 22:38:20.63ID:???
ひとつのテーブルで行ごとにアクセス権を設定できるDBMSもあるにはあるけど
(MySQLでできるかどうかは知らん)
アプリケーション側で制御するのが普通
ユーザーごとにテーブルを分けるのは普通じゃない
0782NAME IS NULL垢版2019/02/22(金) 23:41:46.14ID:???
MySQLでもユーザー毎にdatabaseを割り当ててアクセス権を設定すれば出来ないことはないが
そこまでする必要があるのって、ユーザーにテーブル作成や削除までやらせたいときくらいじゃないか?
0783NAME IS NULL垢版2019/02/23(土) 07:25:16.90ID:???
ありがとうございます。>>779です。
SQLに対してDBを作ったり、テーブルを作ったりするのはToDoアプリ側で、ユーザーはToDoアプリの操作のみです。
アプリの保存データをSQLで管理したいという話なのですが、
こういうときは、データベースごとに分けるのが普通ではないというなら、普通はどんな方法で管理するのでしょうか?
@ 一つのDB内に、Aさんのテーブル5つ。Bさんのテーブル5つ作る 。(テーブルが増えていく)
A 一つのDB内に5つのテーブルがありその中でAさんのレコード、Bさんのレコードを作っていく。(レコードが増えていく)
B 名前をつけて保存で、新しいDBを作りその中に5つのテーブルを作る。(DBが増えていく)
0784NAME IS NULL垢版2019/02/23(土) 07:52:54.75ID:???
人が増減するのに合わせてDBやテーブルを増減するのってその管理がまた
大変だろ…。これ言うとここで鬼門の削除フラグが〜になってしまうけどw
0785NAME IS NULL垢版2019/02/23(土) 08:14:15.37ID:???
昔、IBMが作ったシステムの設計見たらビューで権限のあるレコードだけ表示できるようにしていた。
そんなんでパフォーマンスが出るのかと思ったけど、結構大規模なDWHでもそこそこの速度が出ていた。
もしかしたらIBMのチューニング力のなせる業だったのかもしれないが。
0786NAME IS NULL垢版2019/02/23(土) 08:21:42.86ID:???
>>784 ありがとうございます。ということは、ユーザーの操作により、DBやテーブルの作成はあまりしない方が良いということですね。
アプリ起動時に、DBが無ければ作成したかったんですがそれもやめた方がいいのか?事前に作成しておくのが普通?

>>785 なるほど、ビューを使えば個人毎のテーブルとして扱えるって事ですね。

SQL文は理解したんですが、全体的な使い方がイマイチでして、こういう時に役に立つ書籍が何かあれば教えて下さい…
使い方なんて人それぞれっていうのは分かってるんですが。
0787NAME IS NULL垢版2019/02/23(土) 08:41:19.07ID:???
DBMSのことをSQLとか言う奴の相手するなよ…
0788NAME IS NULL垢版2019/02/23(土) 13:28:01.08ID:???
>>786
>事前に作成しておくのが普通?
普通は動的にテーブル作ったりしない

>アプリ起動時に、DBが無ければ作成
WEBアプリだよな
アプリってクライアント側かサーバ側かどっちのことを言ってるんだよ
普通クライアントが直接DB弄ることなんかないだろ


つか設計スレいけ
0789NAME IS NULL垢版2019/02/23(土) 20:49:34.96ID:bVMedebm
>>786
ひとりずつ分けて管理するというのは紙媒体の考え方だから、素人がそういう設計を思いつくのは理解できる。

ただし、リレーショナルデータベースの世界では、かなりおかしな発想。

操作できるのが自分のデータのみであれば、自分のデータかどうかどうして区別できないと思うのか?

権限という概念がどうしてあるのか、勉強した方がいい。
0790NAME IS NULL垢版2019/02/24(日) 09:44:27.01ID:???
>>688
>>689
ありがとうございます!
もう少し考えて勉強します。
0791NAME IS NULL垢版2019/02/24(日) 15:29:30.62ID:???
>>681
横だけど上の世代はWHERE句に結合を書いてたの?
0792NAME IS NULL垢版2019/02/24(日) 15:40:30.55ID:???
いわゆる結合条件のことだろう。
θ結合は直積から選択するのと等価なんでSQL89まではそういう風に表現してた。
0793NAME IS NULL垢版2019/02/24(日) 16:01:11.52ID:???
Oracleに限って言えばシステム内部で組み込まれてるビューは
今でもWHERE句の結合だけじゃないかと思えるレベル
0794NAME IS NULL垢版2019/02/24(日) 18:37:09.51ID:SaGWUbss
>>791
ちゃんと製品のマニュアルを見たことがあるのか?

SQLの歴史上、結合条件はWHERE句に書き、FROM句には書けなかった。
0795NAME IS NULL垢版2019/02/24(日) 18:58:58.79ID:???
>>794
マニュアルなんてあるんだ
見たことないよ
0797NAME IS NULL垢版2019/02/24(日) 19:00:52.96ID:???
>>794
勉強んなるわ
でもFROMに書けるんだから今はWHERE句に書く必要もうないってことだよね?
0798NAME IS NULL垢版2019/02/24(日) 19:03:50.83ID:???
最初に現場でoracleを習って
そこでは(+)が多用されていた
その後外部結合というのを習ったけど
join句、いまだに使い方慣れなくて困る
0799NAME IS NULL垢版2019/02/24(日) 19:06:24.07ID:???
へぇー
じゃあぶっちゃけ今はJOINから入っちゃった方が無駄がないのかな?
0800NAME IS NULL垢版2019/02/24(日) 20:40:22.59ID:???
初心者はまずJOINだけを覚えた方が良いと思う
0802NAME IS NULL垢版2019/03/10(日) 11:15:16.36ID:Q3ybtzHt
社員テーブルに以下の5カラムがあります。すべてnot nullカラム。
社員id(主キー)、氏名、所属部署、入社年度、生年月日
社員idはランダムで採番されます。

このとき、
所属部署ごとに以下を満たす1人の氏名と生年月日を抽出するとき、
どのようなSQLが考えられますか?
・入社年度が最も過去
・それが複数人居る場合は、その中で社員idが最大の社員

お力添えよろしくお願い致します。
0803NAME IS NULL垢版2019/03/10(日) 11:25:40.65ID:???
FROM 社員テーブル T1
WHERE NOT EXISTS (
SELECT * FROM 社員テーブル T2
WHERE T2.所属部署 = T1.所属部署
AND (
T2.入社年度 < T1.入社年度
OR T2.入社年度 = T1.入社年度 AND T2.id > T1.id
))
0805802垢版2019/03/10(日) 12:06:30.08ID:Q3ybtzHt
803さんのはまだ試してないですが、
group byとhavingで2回絞るのは無理ですかね?
0806NAME IS NULL垢版2019/03/10(日) 13:00:21.03ID:???
>>802
つかってるDBMSかけ

SELECT * FROM(
SELECT
ROW_NUMBER() OVER( PARTITION BY 所属部署 ORDER BY 入社年度,社員id DESC) as 順位,
*
FROM 社員テーブル
) t
where t.順位=1


ウィンドウ関数使えないようなら、サブクエリ3段とかで出来そうだが
0807802垢版2019/03/10(日) 13:27:49.35ID:???
>>806
ありがとうございます、勉強になりました。
SQL serverです。
0808NAME IS NULL垢版2019/03/10(日) 13:47:03.15ID:???
MySQLで

select max(`社員id`),`氏名`,`所属部署`,`入社年度`,`生年月日`
from `社員テーブル`
where (`所属部署`,`入社年度`) in
(select `所属部署`,min(`入社年度`) from `社員テーブル`
group by `所属部署`)
group by `所属部署`;
0810NAME IS NULL垢版2019/03/10(日) 16:08:11.04ID:???
>>806
そういう使いもんならないの教えんのやめ
0811NAME IS NULL垢版2019/03/10(日) 21:01:07.81ID:g5zHpNPp
これから仕事で必要になるためSQL勉強しています。
皆さんはどうやって勉強していますか?

現在SQLBoltってサイトで勉強しています。
覚えが遅いためなかなか覚えられません。
一応ExcelのVBAはできます。
勉強法がわからないのでAccess VBA Standardの資格で勉強した方がいいでしょうか?
0812NAME IS NULL垢版2019/03/10(日) 21:45:35.27ID:???
プログラム言語と違って、何か適当な例題があるわけじゃないし、
割と実践的に体で覚える感じでした
SQLを使用するソフトによって多少、あるいは大きく違ったりするので
SQLをどういう所で使いたいか、ソフトに何を使うかを見極めて学習すると
効果的かも知れません
それから、SQL言語はVBAとは異なるものです
0814NAME IS NULL垢版2019/03/10(日) 21:52:55.29ID:???
>>812
使いものになるまでの所要期間だいたいどれくらい?
0815NAME IS NULL垢版2019/03/10(日) 21:59:42.65ID:???
命がけで取り組めば半年もあればなんとかなります
0816NAME IS NULL垢版2019/03/10(日) 22:06:53.55ID:???
>>815
すみません横から失礼いたします。
業務上必要に迫られ勉強することになりました。
環境は会社で用意されてますが前任者が居なくなってしまう為、ゼロから始めて1ヶ月半でモノにしろと言われています。
命がけで半年ですか…胃が痛くなってきました。
1ヶ月半など無茶苦茶な要求と言えそうですね(泣)
ちなみにエンジニアさんですか?当方非エンジニアです。
0817NAME IS NULL垢版2019/03/10(日) 22:10:58.93ID:???
複雑さの程度にもよりますから
簡単なものでしたら、1か月も掛からずに習得は出来るでしょう
担当する業務の内容次第です
0818NAME IS NULL垢版2019/03/10(日) 22:19:54.37ID:???
>>817
レスありがとうございます。
段階にもよりますね。
予定されているものを見たところサブクエリ5〜7つ、最後で結合するという説明でした。
かなり長くこんなの書けるのだろうかと気が遠のきました。
テーブルの挿入などはなさそうです。
0819NAME IS NULL垢版2019/03/10(日) 23:06:33.52ID:g5zHpNPp
>>812
私はあまり覚えがよいほうじゃないので、業務が始まる前に
勉強して基本的な知識をつける予定でしたが、
やはり実務をこなして体で覚えるほうが早いのですね。
レスありがとうございます。

>>813
レスありがとうございます。
ゲーム会社で簡単なデバック作業をしています。

SQL覚えるのに半年もかかるのですね。
皆様色々教えてくれてありがとうございます。
0820NAME IS NULL垢版2019/03/10(日) 23:10:57.13ID:???
>>819
818です。横から質問奪ってたいへん失礼しました。
ちょうど同じような境遇でしたもので。
思ったよりもSQLを身につけるのは時間がかかりそうで覚悟せねばと思いました。
お互い頑張りましょう。
0821NAME IS NULL垢版2019/03/10(日) 23:31:28.45ID:g5zHpNPp
>>820
いえいえ失礼なんて、とんでもないです。
私もSQLを覚えるのがこんなに時間がかかるとは思いませんでした。
大変だと思いますが、お互い頑張りましょう。
0822NAME IS NULL垢版2019/03/10(日) 23:50:17.33ID:???
>>811
仕事で必要になるならその仕事で使うDBMS使えばいいと思うが
大抵のDBMSは無償版提供してるし
0823NAME IS NULL垢版2019/03/11(月) 00:01:23.59ID:???
このスレの先頭、>>3-10辺りをすらすらと書けるようになれば
大体の業務はこなせるんじゃないかな?w
0824NAME IS NULL垢版2019/03/11(月) 00:03:27.75ID:???
分からなくなったらここで聞いてみると良いですが、
その際に、ソフトに何を使っているかを書いて欲しいです
ソフトによって使えたり使えなかったりするものがあります
0825802垢版2019/03/11(月) 01:04:25.55ID:D8ZFjyx6
Sybase ASEだとOLAP関数サポートなく、
806さんのムリでした

一番エレガントだと思ったのに
0826NAME IS NULL垢版2019/03/11(月) 03:02:21.27ID:???
初心者の質問続きとなっているようですみませんがお願いします
「SQLの基本構文を書くことができる」というとどういった範囲になりますか?
0827802垢版2019/03/11(月) 03:57:23.23ID:wSBvFW/D
>>803
望んだ結果が出ました。
ありがとうございました。

社員テーブルに該当するものが複数テーブルから構成されたサブクエリだとかなり重くなりました。
0828NAME IS NULL垢版2019/03/11(月) 11:49:18.57ID:???
Select文のasに( )を使いたいのですが、どうかけばいいでか?
0829NAME IS NULL垢版2019/03/11(月) 12:26:03.33ID:???
ダブルクォートで括るのが普通だが
角括弧やバッククォートを使うDBMSもある
0830NAME IS NULL垢版2019/03/11(月) 13:16:00.18ID:???
>>828
そういったあんた個人のわがままが通ったとして、
で、ユーザー(つまり結果)に優位性があるのか?
0831NAME IS NULL垢版2019/03/11(月) 13:27:39.34ID:???
>>829
レスありがとうございます。
使ってるのはpostgresqlてすが、" ではダメみたいです。

>>830
As 時間 としていたところ、ユーザーから 時間(分) と表示して欲しいとの要望かありました。
()は特殊な文字てあることは理解していますが、何らかの策があるのではと質問したのですが。あまりに非常識なようでしたら諦めます。
0832NAME IS NULL垢版2019/03/11(月) 14:38:08.55ID:???
postgresなら"でいいはず
なんらかのプログラミング言語を介して使っているなら
そのプログラミング言語に対して"をエスケープしなければならない
0833NAME IS NULL垢版2019/03/11(月) 15:02:14.67ID:???
>>832
すみません、アホなことしてました。
時間"("分")" って…
"時間(分)"でokでした。
0834NAME IS NULL垢版2019/03/12(火) 15:55:28.54ID:wb2Tlo5B
まもなく日本から世界経済が崩壊し、世界教師マYトレーヤとUFOが出てくる。
それからベーシックインカムがはじまるので、20年間ヒキコモリの人でも死にはしない。
むしろ、心配するなら被曝のほう。

【メルトダウンA級戦犯】 『非常用発電機』安倍が放置  『非常用空冷回路』小泉が撤去  死刑求刑
https://rosie.5ch.net/test/read.cgi/liveplus/1552357792/l50
0835NAME IS NULL垢版2019/03/20(水) 08:25:55.58ID:???
ロジックどこまでSQLにするのが正解?
0836NAME IS NULL垢版2019/03/20(水) 08:52:06.23ID:IPQHQif1
>>835
できるだけSQLには詰め込まない。
0837NAME IS NULL垢版2019/03/23(土) 10:38:46.25ID:???
何個までテーブル結合する?
0838NAME IS NULL垢版2019/03/23(土) 10:48:20.01ID:???
>>837
必要なだけ
経験としては10個ぐらいまでやったことある
0839NAME IS NULL垢版2019/04/06(土) 16:59:18.80ID:???
テーブル
No1 No2 No3 No4 No5 No6 No7 No8
data1 A B A A A C B A
data2 A A A A A A B B
data3 C C C A B A A A
data4 A A C C A B A B
data5 A A B A A B B A
data6 A C C A C C A A

ほしい結果
A B C
data1 5 2 1
data2 6 2 0
data3 4 1 3
data4 4 2 2
data5 5 3 0
data6 4 0 4


横方向にA,B,Cの数をカウントしたいですが、SELECT文のみで実施するとしたらどういったクエリになりますか?
oracle12です。
0840NAME IS NULL垢版2019/04/06(土) 18:34:14.74ID:zJrZyIQq
>>839
Excelでやれば?
0841NAME IS NULL垢版2019/04/06(土) 18:34:35.19ID:???
select
No1,
((case No2
when A then 10000
when B then 100
when C then 1
end)
+(case No3 ……)
+……)
from テーブル
0842NAME IS NULL垢版2019/04/06(土) 20:48:36.77ID:???
>>839
スマホだから試してないけど
(セレクトはselectに置換えてくれ)
セレクト
T.data as data,
sum(case T.NO when 'A' then 1 else 0 end) as A,
sum(case T.NO when 'B' then 1 else 0 end) as B,
sum(case T.NO when 'C' then 1 else 0 end) as C
from (
セレクト data, NO1 as NO from table
union all
セレクト data, NO2 as NO from table
(* 中略 *)
union all
セレクト data, NO8 as NO from table
) T
group by T.data
0843NAME IS NULL垢版2019/04/06(土) 22:02:53.39ID:???
>>840
>>841
>>842
レスありがとうございます。

>>841
ちょっと理解できませんでした。

>>842
やはり、UNION ALL使うぐらいしかないんですね。
少し調べて全く同じものまではたどり着けました。
NOが200ぐらいあるのですが、テーブルの設計自体を見直したほうがよさそうですね。
0844NAME IS NULL垢版2019/04/06(土) 23:57:44.63ID:zJrZyIQq
>>843
そもそもその表で管理しようとしているところが天才
0846NAME IS NULL垢版2019/04/07(日) 11:10:36.22ID:???
>>845
ありがとうございます。
ちょっと調べてみます。

>>844
うん。わかってる。
ほんとはこういったテーブルにしたいのだけど、毎日のレコード数が凄いことになっちゃうなーって。
別に集計されたテーブルを作ることを検討します。

data_ No rank
data1 No1 A
data2 No1 A
data3 No1 C
data4 No1 A
.
.
.
data1 No8 A
data2 No8 B
data3 No8 A
data4 No8 B
data5 No8 A
data6 No8 A
0847NAME IS NULL垢版2019/04/07(日) 12:44:56.58ID:???
>>846
> 毎日のレコード数が凄いことになっちゃうなーって。
どんなシステムかわからんけど今時そこら辺のPCでも100万レコード程度は普通に扱えるしOracleでそこそこのサーバー入れてりゃ1億件程度でも破綻しないよ
0848NAME IS NULL垢版2019/04/07(日) 14:24:50.93ID:???
>>847
1次元配列だと200万レコード/日ぐらいが想定されるので、少し厳しいのかなと感じています。
集計前・集計後のどちらもが必要なので、各々のテーブルを作るのが良さそうですかね。
0849NAME IS NULL垢版2019/04/07(日) 14:33:05.24ID:???
項目にsumA、sumB、sumCを追加しておいて
レコード挿入時に集計しておけば良いのではないか?
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
現行バージョンとは何?
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です
よろしくお願いします
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:???
データ件数はどの位?
インデックス張ってる?
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文を投げて、結果をワークシートに取り込むまでの機能の話だろ。
かなり初期からある機能だぞ。
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文) を見たいな
0952NAME IS NULL垢版2019/05/19(日) 15:25:35.49ID:H3ZBKVvV
946です、みなさんありがとうございます
SQLはあってるんですね、よかったです

模範解答は>>949さんが書いてくださってるように、asでテーブルすべてに別名をつけています
テーブル名を指定するときは、別の名前を付けた方がいいんですね
これからやってみます
 
またよろしくお願いします
0953NAME IS NULL垢版2019/05/21(火) 10:14:27.63ID:???
microsoft sql server 2008

テーブル同士を結合するとき、char型の項目とvarchar型の項目とで
結合するときはconvertで型を合わせる必要があるでしょうか?

この項目はマスタテーブルの主キーなのですが、
伝票テーブルに外部キーとしても存在します。
伝票側の項目には必ずしも値が入るとは限らず、空白も存在します。
そのためマスタテーブル側をchar型に、伝票テーブル側をvarchar型にし、
それぞれで外部結合します。
0955NAME IS NULL垢版2019/05/21(火) 23:46:08.20ID:???
そもそもなぜ型を合わせないのか
値がないなら、空白じゃなくてNULL入れろよ

まあ世の中にはNULLと空白を区別できない欠陥DBもあるけどなw
0956NAME IS NULL垢版2019/05/22(水) 01:00:05.54ID:???
主キーにする項目に、値が入らないとか、調布市議
0958NAME IS NULL垢版2019/05/22(水) 06:11:10.78ID:???
NULLと空白を区別できない欠陥DBなんかあるかな
長さゼロの文字列とNULLを区別できない欠陥DBなら知ってるけど
0959NAME IS NULL垢版2019/05/22(水) 06:20:15.84ID:???
空白と空文字列を区別できない欠陥PGなのでは?
0960NAME IS NULL垢版2019/05/22(水) 09:43:26.07ID:???
NULL不許可にしてるんでしょ
NULL撲滅委員会とかあるし
0961NAME IS NULL垢版2019/05/22(水) 17:19:04.11ID:3DWUiXWo
>>958
長さがゼロの文字列だったら、それはNULL値。これが本来のデータベースの定義。
0962NAME IS NULL垢版2019/05/22(水) 18:12:49.17ID:???
長さ0の文字列と=で比較しても良いのかな?
0963NAME IS NULL垢版2019/05/22(水) 19:07:48.33ID:???
長さゼロの文字列とNULLを区別しないのは
Oracle Databaseの有名な欠陥であり
それはOracle社自身も認識していてマニュアルにも書いてある

https://docs.oracle.com/cd/E96517_01/sqlrf/Nulls.html
> Oracle Databaseは現在、長さが0(ゼロ)の文字値を
> NULLとして処理します。ただし、将来のリリースでは
> この処理が変更される場合があるため、空の文字列を
> nullと同じように処理しないことをお薦めします。
0965NAME IS NULL垢版2019/05/22(水) 20:47:13.37ID:???
>>963
> ただし、将来のリリースでは
> この処理が変更される場合があるため
まあ、どう見ても無理だろw
0966NAME IS NULL垢版2019/05/22(水) 21:09:06.79ID:???
かなり昔からそういってるからなぁ
そのうちVarchar3型つくるんじゃって話もある
0967NAME IS NULL垢版2019/05/22(水) 21:20:32.64ID:???
Oracleを選ぶメリットがなにもない
0968NAME IS NULL垢版2019/05/22(水) 21:36:21.32ID:???
欠陥であることは分かってるんだけれども
直しちゃうと既存のアプリケーションに甚大な影響が出るんで
直すに直せないんですよー
という気持ちがありありと分かるマニュアルだねえ
0969NAME IS NULL垢版2019/05/22(水) 23:55:25.37ID:???
つーか null と空文字列を同一視するというのは極めて常識的な挙動であって
標準SQLの方が時代遅れと言えるのでは

ここはもう標準を変更してnullも空文字列も、ついでに空白だけのカラムもすべて同一視するようにすべき
null は is で比較するとかいう無意味な制限も廃止して全て = の比較に統一すべき

とするのはどう?
0970NAME IS NULL垢版2019/05/23(木) 00:07:35.60ID:???
こんなところでそんなアホ丸出しの提案して
何かが変わると本気で思っているのか
0972NAME IS NULL垢版2019/05/23(木) 00:45:42.35ID:b4XWIHfq
空文字列とNULLが混在して混乱を招いているシステムは多い。
0973NAME IS NULL垢版2019/05/23(木) 00:54:30.57ID:???
空の文字列とNullを同一視するのが常識とかないと思うんだが
データベースしか触らんやつはそういう常識なの?
0974NAME IS NULL垢版2019/05/23(木) 01:02:33.57ID:???
Oracle社員?が荒らしてるだけ
0975NAME IS NULL垢版2019/05/23(木) 01:05:22.79ID:???
ホントOracleはシステム開発者にとってマイナスなことしかしないよね
0976NAME IS NULL垢版2019/05/23(木) 01:20:10.41ID:???
特定のDBしか触らない奴だとそれが常識だと考えるかも
その場合は、そいつには触らない方が良いと思う
0977NAME IS NULL垢版2019/05/23(木) 01:26:06.81ID:???
ぬるい質問ばかりで暴れたくなった
相手はどのDBでもよかった
0978NAME IS NULL垢版2019/05/23(木) 02:16:05.50ID:???
>>973
例えばC言語で空文字列とnullが同じと言ったらそりゃ変なんだが
抽象度が高いSQLで区別する意味は全くないと思うんだよね
むしろ区別することが当然と考えること自体が何か洗脳されてるという気がするわけ
まあ釣りではあるのだが
0979NAME IS NULL垢版2019/05/23(木) 02:52:16.93ID:TvO7l/JJ
全項目NOT NULLにして集計処理の手間を減らすことはあるな
CSV/TSVを外部テーブルで使うとNULLが使えないことがほとんどよね

外部結合して片側NULLで引っ掛けるのはよく使うから
NULLの概念自体はあってほしいけど
0980NAME IS NULL垢版2019/05/23(木) 08:31:33.80ID:???
nullと空文字列が区別できなくて良いってやつは、nullが値ではないって概念が理解出来ないんだろうな
0982NAME IS NULL垢版2019/05/23(木) 10:57:17.75ID:???
>>980
その概念に実用性はあるのか?
それで何か便利なことがあった?
むしろ不便であって弊害しかないオナニー概念だと思うのだが

いや >>970 の言う通り、ここで言っても仕方ないことは分かってるけどね
たまには王様は裸だと言って見たくなる
0983NAME IS NULL垢版2019/05/23(木) 12:25:42.68ID:???
あえて釣られてやるけど、例えば未入力と空文字の入力を区別したいとか普通にあるだろ
0984NAME IS NULL垢版2019/05/23(木) 12:41:39.82ID:???
>>983
あるか? そんなの
空文字の入力は未入力でいいんでわ
0985NAME IS NULL垢版2019/05/23(木) 12:42:22.93ID:???
未入力よりも未設定ってことでは
0986NAME IS NULL垢版2019/05/23(木) 13:19:01.66ID:???
>>985
空文字の入力を未設定と区別する必要があるのかね
それを区別しようとすることでシステムは複雑になり間違いも多くなる
0987NAME IS NULL垢版2019/05/23(木) 13:58:31.76ID:???
セルの値としてはどうかわからないが,テーブル結合後の名テ―ブルの行の属性値としては有りだと思う
0988NAME IS NULL垢版2019/05/23(木) 14:19:42.47ID:???
>>987
そうかねぇ
むしろ使い分けする運用こそ危うい気がするのだが
0989NAME IS NULL垢版2019/05/23(木) 18:02:19.51ID:???
整数値カラムでouter joinしたとき
存在しない行の整数値カラムの値は
何になるのでしょうか?
0990NAME IS NULL垢版2019/05/23(木) 20:00:04.84ID:RM6eL1FJ
>>988
バカが使えばどんな道具も危ないからな
0994NAME IS NULL垢版2019/05/23(木) 23:30:17.28ID:???
どうしてオラクルは、ああいう苦しいコメント出しているの?
0995NAME IS NULL垢版2019/05/24(金) 07:31:48.91ID:???
「sqlなら曖昧でよくね?」っていうけど
連携するプログラム側が困るんよね。それじゃぁ

運用担当がデータ見るだけに使うなら
テキトーでも許されるのかもしれんけど
0996NAME IS NULL垢版2019/05/24(金) 13:54:52.91ID:???
NULLとかnilとかNoneについては、「値ではない」という説明の仕方より、「あくまでも値だけど、約束事として、(概念的に)値なしと呼びうる状況(の一部)に対応する値として利用できる特殊な値」という説明の仕方の方が誤解を招きにくいんじゃないか。
たとえば、空の配列の長さが0、Noneが1個入った配列の長さが1という言語で「Noneは値ではない」という説明はしづらい気がする。

結局、(概念的に)値なしと呼びうる状況のうち、どれにNULL/nil/Noneを対応させて、どれに空文字列・空配列を対応させるか(undefinedがある言語についてはそれも)というマッピングを整理しておくべきという話かなと思うが。
0998NAME IS NULL垢版2019/05/24(金) 18:24:26.05ID:???
頭ぱっぱらぱーのウチの運用が言いそう
10011001垢版Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 504日 21時間 44分 19秒
10021002垢版Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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