SQL質疑応答スレ 18問目
■ このスレッドは過去ログ倉庫に格納されています
このスレは 「こういうことをやりたいんだけどSQLでどう書くの?」 「こういうSQLを書いたんだけどうまく動きません><」 などの質問を受け付けるスレです。 SQLという言語はISOによって標準化されていますが この標準を100%実装したDBMSは存在せず、 また、DBMSによっては標準でない独自の構文が 追加されていることもあります。 質問するときはDBMS名を必ず付記してください。 【質問テンプレ】 ・DBMS名とバージョン ・テーブルデータ ・欲しい結果 ・説明 前スレ: SQL質疑応答スレ 17問目 https://mevius.5ch.net/test/read.cgi/db/1468157341/ うっせえSE如きが意見してんじゃねーよ はやく答えろやゴミ ってみんな思ってるからな?wwwそういうふうに思いながら仕事しろよ?wwwwww そろそろ飽きてきたから俺が答えちゃおうかなwいいのか?お前ら?w でたー!wwwwww NGにしてるで勝ち誇ってるやつwwwwww ・SQLインジェクション対策はシングルクォートを空白に置換すればOK ・テーブルで年月のみを入れる項目は文字列型で定義 この辺を論破できないので悲しい... シングルクォートなんてデータ入れねーよ m9(^Д^)プギャー 年月のみならサイズを小さくできるよといわれる 年月を文字型にすると ・比較相手によってはキャストが必要 ・範囲チェックが働かない ・容量が増える 逆に年月を文字列型にするメリットって何かあるの? あと速度的なとこも気になるね >>164 いまどき数バイト削るためにコンピュータの数値型を使うのは時代錯誤。しかもリレーショナルデータベースでは文字として出力するのが優先だから文字表現でデータを格納するのが基本。 気持ち悪い話してないではやく>>60 答えろやごみども 多くのゴミの中でも本当にゴミと言えるのは>>172 だけやでw >>167 int型の項目値を文字列に変換する方がはるかに負荷が大きい。 正直なそんな低レベルなDB設計してる奴がいるとこで働いてるお前がかわいそうだわ んでそんな話どうでもいいから早く質問答えろな? 年月は数字項目にしといたほうがトラブルが少ない。整合性チェックにもなる 文字列にして文字が入ってたりすると日付形式に変換する時エラーになる >>167 キャストが必要というのもコンピュータの数値型を使っていても、最終的には文字列に変換する。 年月の同士の計算が膨大にあるのであれば理解できなくないが、日付項目同士の比較は日付型で行う。 コンピータの数値表現で扱ってしまうと、まず日付型に変換し、実在しない年月や、1ヶ月前、1ヶ月後、月末日等の特定に2段階のキャストが必要になる。 現実には存在しない年月を生み出してしまうリスクまでとる必要がない。 何度も言うが年月の単純計算などほぼないうえに、文字列に大小判定は気にせず、コンピータの数値ばかりこだわるのはリレーショナルデータベースを理解していないどころか、コンピータを理解していない。 >>60 の簡単なSQLも書けないアホが何言っても滑稽なだけですよ^ ^ 一人で勝手にint型や数値型を持ちだしてそれを的外れな長文で否定w 文脈を理解してないどころか、一般常識を理解していない。 ★★★根税制による格差解消は、赤犬を根絶しユダヤ支配を永遠に終わらせる為の決め手である。★★★ ▲ ▲ この掲示板(万有サロン)に優秀な書き込みをして、総▲額148万円の賞金をゲットしよう!(*^▲^)v http://jbbs.livedoor.jp/ ▲study/3729/ →リンクが不良なら、検索窓に入れる! >>175 >>178 いつもCPU100%にしちゃうから勉強になります!! 統計情報も取らないアホ集団で仕事してるのはわかったから はやく俺の質問答えてや^ ^ >>188 統計情報はユーザーが取るものではないぞw 訳のわからんツッコミにさすがの神もタジタジの様子w MySQL (InnoDB) で ALTER TABLE をする際の振る舞いとしてテーブル単位のロックではなくインスタンス全体をロックしているような挙動を示しています innodb_file_per_table を疑ったが ON だったのですが何が問題なんでしょうか >>192 追記: 原因の切り分けが非常に難しく、 AWS RDS を利用しているからこうなっているのか、 それともこの挙動が発生したインスタンスに大量のデータベース・テーブル(150万テーブル以上)が存在していることが問題なのか、 他に見落としている条件がないかを調査している。 >>194 MySQLの問題だからねそれ。 あと今質問打ち切ってるよ? >>195 150万って別に普通だと思うが?アホ? ああごめんね。テーブル数150万はないわ。 どんな教育受けてきたん? はいこの話終わり早く答えて >>198 そうだね教えを請うたことないわ いっつも享受する側だわ スキーマテーブルレコードカラムの違いがわかんないアホがこのスレ使ってんなや! 「指摘したって言う奴の指摘は大体間違っている」の法則 >>203 こんな簡単なSQLも作れないの? 仕事辞めた方がいいんじゃない? >>205 きみ本当のあほみたいだから2度とこないでね >>207 書き間違えまで揚げ足取るってやべえなここの民度 >>210 お前あほ?俺に安価つけてんなよゴミSEが 読み間違えた挙句にアホ呼ばわりする人間が民度を語るなよ。みっともない奴だな。 >>213 君名前欄も読めないメクラさんかな? 民度どうこうなんて言ってないんだけど? 文体から伝わってくるんだけど加齢臭口臭やばいでしょあなた? >>212 あら「普通」の概念が破綻してる方がまたいらっしゃった あら「普通」の概念が堅固なバカがまたいらっしゃった select A1,A2 from tableA select B1 from tableB これをそのまま流すと結果は2行になりますが、 これをA1,A2,B1と1行でとる方法はないでしょうか 書き忘れましたが、どちらも1行しか返さないSQLです >>219 それぞれの実行結果が1行しかないなら select tableA.A1, tableA.A2, tableB.B1 from tableA, tableB; MysqlがすぐおちるのですがMariaDBにすれば改善されるのでしょうか? よく出るエラーメッセージはこんなやつです。 mysqli_set_charset(): Error executing query in DBのURL MariaDBはMysqlに比べてどのぐらい優れているのかもわからないので教えていただければ幸いです。 >>223 おそらくデータベースに設定している文字セットで不整合があるんだろうと思いますが MySQLの設定方法に関する質問の場合は、ここで聞くよりも、 MySQL 総合 Part26 https://mevius.5ch.net/test/read.cgi/db/1499949595/ で聞いた方が良いかと思います。 MariaDBに関するスレもあります。覗いてみると良いかもしれません。 https://mevius.5ch.net/test/read.cgi/db/1360677476/ with句で取得した数列を別のテーブルでその数列と一致するレコードを取得したいんだけどどうすればいいでしょう? withで別で取得したリスト名Aとし取得結果がBだとすると select ※ from X where X.C IN (SELECT B FROM A) で取得しようとしたんだが上手くいかずいろいろとぐぐってみたけどわからなかったです・・・ withで別で取得したってのが意味わからん その部分を含めてどうやろうとしたのか書けば答えようもあるが すみません。書き方が悪かったです。 使用しているのは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テーブルに何件存在するかを確認したいです。 参考書でも開けばそんくらいわかんだろゴミ 早くお前ら答えろや スレチの質問には誘導して俺の質問には答えないって根性捻れまくりだろお前ら 「Xの数列」という説明が他人には理解できない。 Xがひとつの列だとするとなぜグループ化なのかわからない。 さらに再帰クエリにして、別のSELECT文のINリストのSELECT文にしているのも意図がくみにくい。 かなり単純なことを聞いていると予想はできるが、なぜこんなに難しく考えているのか? 本当に>>229 の通りに書いているならcount(※)がcount(*)の間違いだが それ以外に致命的な間違いは見当たらない まあこう書いても同じ意味にはなる select count(*) from B inner join Z on B.C = Z.X; 再帰のないWITHを再帰クエリと呼ぶなということか。 ただOracleは再帰があってもなくてもただWITHと書いて、再帰のないWITHと言ったりするからそう書いた。 標準SQLではWITH RECURSIVEと書かないといけないが、Oracleはたしかこの構文がない気がする。 >>232 B.CかZ.Xの少なくともどちらかがユニークでないと同じ意味にはならん このスレはSQL入門スレなのかSQLオタクスレなのか? よくわからない質問に、エスパー回答をするというIT技術者の間ではあまりないやりとりが多い。 テンプレ見ろゴミ ここは初心者用スレだよ なのに俺の質問は基礎的すぎるとかいう謎老人のおかげで誰も答えんのや まじでゴミSEは右ならえの自我すら持たない穢多非人よ >>239 IT技術者の間ではよくわからない質問によくわからない回答をして お互い納得するのがデフォルトスタンダードですものねw まず質問者が無礼。回答者がとりあえず想像で回答。これがこのスレが機能していない理由。 >>240 初心者向けであれば、SQLを回答するのではなく、何をしようとしているのを確認するのが先です。できればいい論をデータベース板で確認するのはおかしいので、プログラム板やプログラマ板で質問すべきです。 >>245 わかったわかったお前の意見とかどうでもいいわ 文体見るだけで中年のごみおっさんってわかるわやばいよ君? 匿名の掲示板で誰でも書き込めるんだから 気に入らなければスルーすれば良いだけ 質問者が無礼って、お前に害悪を加えてきたわけじゃあるまいし 助けてください。 ACCESSのDBなんですが、 tblAは、[id][なまえ][電話番号][性別][入会日]というフィールド構成のマスター名簿 tblBは、[id][入金日][入金額]というフィールド構成です。 このテーブルを元に、ACCESSやEXCELのVBA上で、 [id] [なまえ] idごとの[入金額]の合計 WHERE 昨日=<[入金日] <= 明日 というレコードセットを取得したいです。 tblBの集計に、tblAからもってきたなまえフィールドをくっつけたい、という感じです。 INNER JOINとか、そういうのを駆使して、なんとかひとつのSQL文を作りたいのですが、 うまくいきません。 どなたか、SQL文そのものをご教示ください。 お願いします。 >>248 このままだとよくわからん 「誰が」入金したという情報はどこで管理しているの? >>249 すみません。idというのは、メンバーidのことです。レコードidではありません。 わかりづらくてすみません。 メンバー(マスターで、idから名前がわかる)による入金の記録がBテーブルです。 それぞれのメンバーが、合計でいくら入金したのか、を集計したいのですが、 Bテーブルにはidしかなく、集計表には名前も欲しいので、Aテーブルから持ってきたいのです。 >>250 君質問する以前の問題だよ? あと今質問受け付けてないからばいばい >>250 えーと 同じ日に2件以上の入金はないということ? >>252 ありえます。 なので、SUM[金額] GROUP BY id としたいです。 >>253 そもそもテーブル設計がまずいのでは 同じ人が同じ日に同じ金額を入金したらどうなるの? 主キーは? Bテーブルにはオートナンバーのridフィールドがあります。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる