SQLなら俺に訊け [無断転載禁止]©2ch.net

1デフォルトの名無しさん2017/07/14(金) 07:40:53.63ID:HFjsarQi
さあ

35デフォルトの名無しさん2018/05/24(木) 21:00:50.73ID:tj3fGZUH
SQLで超高速スクロールシューティングゲームを作りたいのですがどこから勉強したらいいのかわかりません

36デフォルトの名無しさん2018/05/26(土) 08:25:51.19ID:ww7rlXCh
何のネタ?

37デフォルトの名無しさん2018/05/30(水) 21:07:58.36ID:mJRov030
SQLが出来なさ過ぎて今日解雇されました・・・

38デフォルトの名無しさん2018/05/31(木) 05:05:26.67ID:iPLFO8dU
SQLの勉強をした後に普通の手続き型言語の勉強をすると楽ちんさに驚く。SQLは難しいわ。

39デフォルトの名無しさん2018/06/05(火) 09:59:14.61ID:tY+4OZF+
ミック氏の著書にある「WHERE句で分岐させるのは素人、
プロはSELECT句で分岐させる」を職場で実践したら異常
者扱いされて追放されたよ

40デフォルトの名無しさん2018/06/05(火) 19:17:49.83ID:EhA+zJu2
>>39
その職場は日大アメフト部か?

41デフォルトの名無しさん2018/06/06(水) 22:27:26.69ID:R4gO35f9
[tbl]
key
-----
A
B
C
D
こんなテーブルがあって、
SELECT key
FROM tbl
ORDER BY CASE WHEN key = 'B' THEN 1
WHEN key = 'A' THEN 2
WHEN key = 'D' THEN 3
WHEN key = 'C' THEN 4
END;
このSQL文で並べ替えができるのはなぜでしょうか?

42デフォルトの名無しさん2018/06/07(木) 08:40:18.91ID:Jg+r/SZw
>>41
クイズ?

43デフォルトの名無しさん2018/06/07(木) 10:09:37.01ID:2+Xi7sa/
ミックさんの本に同じ例題があったな

44デフォルトの名無しさん2018/06/19(火) 19:15:35.13ID:67yeiw0t
n+1問題ってなんやねん

パフォーマンス低下したら何がいけないの?

45デフォルトの名無しさん2018/07/04(水) 22:30:30.92ID:gFgZc5FG
KOC

46デフォルトの名無しさん2018/07/27(金) 09:24:44.45ID:kjOumEVE
文字列を追記するにはどうすると良いのでしょう?
これだと上書きされてしまいます。
どうすると良いのでしょう?

$sql = 'update imglistdb set mcategory = ? where id = ?';
$stmt = $dbh->prepare($sql);
$flag = $stmt->execute(array($w, $id));

if ($flag){
print('データの更新に成功しました<br>');
}else{
print($id.'のデータの更新に失敗しました<br>');
}

47デフォルトの名無しさん2018/08/05(日) 16:50:26.11ID:ja6KHJcY
>>46
できました。

48デフォルトの名無しさん2018/08/10(金) 14:51:46.21ID:Y0WYl7hO
サマータイムが導入されたとしてUTCで時刻が記録されてテーブルで
今日の分の売り上げを集計する場合どうするのが正しいですか?

49デフォルトの名無しさん2018/08/10(金) 21:30:06.76ID:gtqPLADd
「今日」を定義しろ。

50デフォルトの名無しさん2018/08/24(金) 09:10:24.90ID:AhUX2VuR
SQLの構文ってなんであんなクソだらけなものが採用され続けているの?

insertのintoとかupdateのsetとかいらないし
updateでwhereを指定し忘れたら全レコードが更新されるのとか超危険だし
updateはID指定→値指定で更新っていうのが直感的にやりやすいのに
whereを最後に持ってこないといけない仕様のせいでid指定が最後になるし
カラムと値の指定の仕方も一貫性がないし

後方互換性としてあれらのコマンド"も"使えるならまだわかるけど
あれらのコマンド"しか"使えないとかこの業界頭おかしいんじゃないの

51デフォルトの名無しさん2018/08/24(金) 10:46:30.87ID:h+5y0En0
言いたい事は分かるし別に否定はしないのだが、糞でも広まって使われてる以上それに従わざるを得ないのさ
JSと一緒だよ

52デフォルトの名無しさん2018/08/24(金) 11:18:46.54ID:Gecec4UJ
フェールセーフの仕組みはインターフェースの実装レベルでなんとかしてねってことなんじゃないの

53デフォルトの名無しさん2018/09/15(土) 19:10:17.26ID:crViL/AR
データの持たせ方を誤ってしまって、
カラム定義
時間,val1,val2,val3・・・
ってなってるんですが、val1からvalnで最大値を取りたい場合、どのようにアプローチするのがスマートですか?

54デフォルトの名無しさん2018/09/15(土) 20:19:51.77ID:KIanXBkQ
時間がユニークじゃないどうしようもない状態なら
とりあえずコレでいけるハズ

select
 max(ahox.time_),
 max(ahox.max_val)
from
 (
  select rowid, time_, val1 as max_val from aho
  union all
  select rowid, time_, val2 as max_val from aho
  union all
  select rowid, time_, val3 as max_val from aho
  ...
 ) ahox
group by
 rowid

時間がユニークならrowid(DBMSが内部的にテーブルにもたせてる行の識別値)みたいなもんは使う必要ない
使う必要があるならrowidはDBMSごとに違うからあとは調べなさい

55デフォルトの名無しさん2018/09/15(土) 20:37:41.73ID:KIanXBkQ
運用方法のアプローチとしては
とりあえず一回全抽出してテーブルを作り直したほうがいい
こんな感じのワークテーブルをマニュアル作業で一旦作る

 id, eventno, 時刻, 項目名, 値

eventnoの部分にはとりあえずrowidつっこんどく
で、idはただのシリアル値

システムがこの形式のテーブルに落とせる運用にすれば
それからはすぐに最大値がとれるようになる
そうなるまで毎回ワークテーブル作って最大値とるようにすればいい

それまではマニュアル作業で自分でテーブルをつくりなおす
失敗したヤツがちゃんと責任もってやるようにな

56デフォルトの名無しさん2018/09/15(土) 22:24:53.50ID:VdLZkjGs
エクセルの行列を、そのまま表定義にする、馬鹿が多い

列に製品番号があれば、列1・列2・列3 と定義しよる。
それで製品番号が増えるたびに、列を増やしていくw

頭おかしいw

57デフォルトの名無しさん2018/09/15(土) 22:31:40.71ID:crViL/AR
>>54
>>55
お二人共、ありがとうございます。
テーブル再定義も含め、まずは54さんの手法でこの場は凌いでみます。

58デフォルトの名無しさん2018/09/15(土) 22:37:05.98ID:crViL/AR
>>57
同一IDだた。いずれにしてもサンキューです。

59デフォルトの名無しさん2018/09/16(日) 00:44:59.12ID:LDoJnfCQ
>>56
それな、まずは糞なテーブルを捨てろ

60デフォルトの名無しさん2018/09/22(土) 16:25:45.44ID:/Du2bEHB
DBの検索速度ってPC上ではかなり遅いみたいですけど
大手Webサービスはどこも一瞬で結果を返してくれますよね
あれは単にサーバーのスペックが凄いから早いんですか?

61デフォルトの名無しさん2018/09/22(土) 20:22:55.42ID:U3p59MUv
>>60
「DBの検索速度ってPC上ではかなり遅いみたい」
この前提がまずよくわからんが
オンメモリやらキャッシュやら高速ネットワークやら
みんな色々工夫してるから

62デフォルトの名無しさん2018/10/23(火) 15:14:05.50ID:IWYLnZUh
初心者です。もしよろしかったら質問させてください。
CASE文

SELECT TAB1,TAB2,
 CASE
  WHEN TAB2<1000 THEN 'SMALL'
  WHEN TAB2>1000 THEN 'BIG'
  ELSE 'ERR'
 END AS SIZE
 FROM TABLE
WHERE TAB2>0

というコードなのですが、TAB1のように、CASE文で使用しないカラムをSELECTするのは何故なのでしょう?

63デフォルトの名無しさん2018/10/23(火) 23:04:42.87ID:+Sb0MP+K
TAB1の値がほしいから
いらないなら書く必要すらない

64デフォルトの名無しさん2018/10/23(火) 23:05:20.44ID:QS1DBBVT
欲しかったからだろ。

65デフォルトの名無しさん2018/10/24(水) 13:40:18.23ID:AfSv/oYJ
ありがとうございました。
すっきりしました。
SELECT文は新しテーブルを作るのではなくて
見やすいように表型に情報を表示してるだけなのですね

66デフォルトの名無しさん2018/10/24(水) 22:54:40.93ID:WtQFT3Lb
いや概念的には表を作ってる
表から表を作ってる

そういった理解がないとSQLは理解できない

その表からまた別の表を作るのにも利用できる

67デフォルトの名無しさん2018/10/25(木) 09:40:40.88ID:jGXKkZ/C
ありがとうございます!

68デフォルトの名無しさん2018/11/03(土) 11:37:09.06ID:3nMVWrto
テーブル名:RUN_TIME

KEY | COL | DEF_TIME | UPD_FLG
AAA | BBB | 2017-01-01 08:54:21 | NULL
AAA | CCC | 2017-01-01 08:58:31 | NULL
AAA | DDD | 2017-01-01 09:04:25 | NULL
CCC | XXX | 2017-01-02 08:57:46 | NULL
CCC | ZZZ | 2017-01-02 08:59:26 | NULL
CCC | BBB | 2017-01-02 09:05:03 | NULL


というデータが毎日朝9時付近何件かあって、
その日の08:58:00〜09:02:00の間に含まれるレコードのUPD_FLGに'Y'を入れたいのですが
どういうUpdate文を書けば良いんでしょうか

update RUN_TIME set UPD_FLG='Y'
where DEF_TIME >= ??? and DEF_TIME <= ????

というようなSQLになるんだと思うのですが…。

69デフォルトの名無しさん2018/11/03(土) 11:52:19.27ID:3nMVWrto
調べたところ、

where DEF_TIME >= DATE_ADD(DATE(DEF_TIME),INTERVAL 538 MINUTE) and
DEF_TIME <= DATE_ADD(DATE(DEF_TIME),INTERVAL 542 MINUTE);

で行けたのですが、これって一般的なやり方でしょうか?

70デフォルトの名無しさん2018/11/03(土) 15:38:32.68ID:rSl2Ac3O
オレなら普通に DEF_TIME を時分秒の文字列に変換してから比較する
時分固定でその日に該当する年月日時分をいちいち組み立てようとは思わない

71デフォルトの名無しさん2018/11/04(日) 13:01:05.98ID:mRQV89co
日付まわりはDBによって違いがあるからなんとも言えんが、こんな可読性も実行効率も悪いSQL書いてたら説教ものだな

72デフォルトの名無しさん2018/11/11(日) 14:35:31.84ID:vUUak6BF

73デフォルトの名無しさん2018/11/27(火) 18:25:45.02ID:2K5MWtLk
他人が書いたSQLでこんなのや
select T1.*
from T1 left outer join ON T1.aaa = T2.aaa

こんなのがあるんだけど
select X2.*
from X1 left outer join ON X1.aaa = X2.aaa


外部結合してるのに片方のテーブルのフィールドしか抽出してない
SQLが散見してるんだけどこれって全く外部結合する意味ないよな
意味不明すぎてイラッとしてきた

74デフォルトの名無しさん2018/11/27(火) 18:43:21.08ID:DSo9/Qg/
T1.aaa = T2.aaa

これは、両方の表にあるものだけを取り出す。
片方の表だけにあるものは取り出さない

75デフォルトの名無しさん2018/11/27(火) 18:47:04.05ID:2K5MWtLk
言いたいこともわからんのかw
過疎だしここもレベル低すぎてダメだな

76デフォルトの名無しさん2018/11/27(火) 19:41:43.98ID:dtVd+WAB
意味無いことはないけど、多分意図してることじゃないよ

77デフォルトの名無しさん2018/11/27(火) 19:47:50.54ID:PufIRrup
ID:2K5MWtLk
小さいことにイライラしてるわいきなりキレだすわ気持ち悪っw

78デフォルトの名無しさん2018/11/27(火) 20:13:38.58ID:2K5MWtLk
0.01_もキレてないけどね
このスレは初めて見て初めて書き込んだけど
こっちの言いたいことも理解できないパープリンしかいないうえに
二言目が人格攻撃とかレベル低すぎて俺にはもう無理だわw
低能

79デフォルトの名無しさん2018/11/27(火) 20:41:37.76ID:JHhXTC3j
joinしてるテーブルとか書いてないし、ちゃんとSQL全部見て言ってるのかあやしいな

抽出してなくてもwhereとかで使ってれば意味はあるぞ

80デフォルトの名無しさん2018/11/27(火) 20:44:19.89ID:ysmS7zNS
左外部結合だからT1のレコードは全部取り出される。
で、T1にあるフィールドしか取り出さないからT1そのものと一緒だな。

単に間違いか、以前はT2のフィールドも取り出してたけど編集を繰り返してる内にT2のフィールドが要らなくなってしかもT1そのもので良いことに気付いて無いとかかな。

81デフォルトの名無しさん2018/11/27(火) 21:08:12.03ID:dtVd+WAB
一緒にはならないよ。T2のaaaが複数あるならそれだけ同じものが出てくるよ。

82デフォルトの名無しさん2018/11/27(火) 21:30:18.04ID:ysmS7zNS
>>81
???
T1のフィールドしか取り出さないでしょ。

83デフォルトの名無しさん2018/11/27(火) 21:31:25.10ID:ysmS7zNS
ああ、レコードのことね。
でもそんなことする意味有る?

84デフォルトの名無しさん2018/11/27(火) 21:44:13.52ID:7ygBETe/
データパターンでわざと増幅させたい場合はありだな

意味がないならきちんとテストして取り除けばいいだけじゃん

85デフォルトの名無しさん2018/11/27(火) 21:50:57.15ID:dtVd+WAB
>>83だから、>>73に挙げられた情報だけじゃ判断できないよ
例えばT2がT1を色々加工した結果で、既にT2の値を外部に持ってて、それと突き合わせて比較したいためのSQLとか、かもしれない
想像するだけ無駄なので、仕事なら知ってる人を探しに行く方が良い

けど、特に何の効果も無いと結論づけるのだけは間違ってるよ。T2.aaaにunique制約があるかも分からないのだから

新着レスの表示
レスを投稿する