SQL質疑応答スレ 18問目
レス数が1000を超えています。これ以上書き込みはできません。
>>648
str1の長さがstr2より短いことがわかってるなら
where left(str2, len(str1)) = str1
でいいかと ためしてないけど、
where (str1 like str2+'%') or (str2 like str1 + '%')とかでどうだろう >>648
んじゃ他ので
WHERE PATINDEX(str1 + '%', str2) = 1 >>649>>650>>651
お三方、ありがとうございました。
ばたばたしてて遅くなりましたが、確認できました。 >>650-651
str1とかstr2に'%'含んでても大丈夫だっけ? 大丈夫。ただ+が使えるのはMS系だな。
後は使えるやり方に読み換えて 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 | マグロ 1,2,3をuionして4とjoinすればいいんだろうけど,何んでこんな設計? 欲しい結果がよくわからん
4に1〜3をJOINするだけじゃダメなのか? この板誰も人いないけど、他にデータベースの話題扱う場所あるの? Oracle 12cでのSQLに関する質問です。
2つのDATE型のカラムの差をhh:mm:ssで出力したいです。
例
開始日が2018/12/13 7:00:00
終了日が2018/12/17 17:30:30
だとして、この2つの差(経過時間)の出力結果は
106:30:30
と出したいのですが、出来るだけ簡単に計算して出す方法ありますでしょうか?
(時・分・秒でそれぞれ分解して掛け算して計算する方法がネット上にありましたが、もう少しシンプルにできないか模索しています。)
良い御知恵がありましたらご教示お願い致します。 質問です。
製品のメジャーバージョン、マイナーバージョンという2列があり、
メジャーバージョンが最大の中から、
マイナーバージョンも最大の行を取り出すにはどうしたらいいでしょうか?
postgresql9です。 >>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
); >>663
なるほど。メジャーの最大グループからマイナーの最大を取った where in句ですか
ありがとうございます。 window関数使うともっと綺麗に書ける気がする
俺はwindow関数苦手だから書けないが >>661
あんたはDATE型が文字列だとでも思っているのか? a. 顧客テーブル(顧客コード, 顧客名)
b. 商品テーブル(商品コード, 商品名)
c. 売上テーブル(売上日, 顧客コード, 商品コード, 売上数)
↓
売上日, 顧客名, 商品名, 売上数
このように結果が表示されるSQL文を教えてください 何か基本のキって感じ
これが書けないとヤバいと思う こういうのって内部と外部とどっちで繋ぐのがよろしいの?
それとも、JOINではなくWHERE内でキーを繋いであげればいいの?? まだ書かれていない要求仕様があるんじゃない?
読み取れる範囲だとどっちでも良いように思う >>667
select 売上日, 顧客名, 商品名, 売上数
from 売上テーブル
inner join 顧客テーブル on 顧客テーブル.顧客コード=売上テーブル.顧客コード
inner join 商品テーブル on 商品テーブル.商品コード=売上テーブル.商品コード
>>669
FROMに複数テーブル書いてwhereに結合条件書くのは今は推奨されない
内部か外部かは、商品テーブルにない商品売ってたり顧客テーブルにない顧客に売ってたりしない限りどちらでも同じ結果
どっちでもいいなら普通は内部結合にするんじゃね >>672
ありがとうございます
メモしておきます 外部キーがあればinnerなければleft joinかな このなかで一番美人なのって真ん中だよね?深キョンレベルだと思うのだが
ちなみに向かって右は目も鼻も整形してるって本人が公言してるけどそれ抜きにして誰が一番美人だと思う?
http://bigsta.net/media/1933567086757747003_3564907098 >>672
そうなのか、勉強になったわー。
講習受けたときはJOINで教わったのに、実際にWHEREで書かれたの使ってる人たちがいて何でだろうと不思議だったんだけど、
歴史的な表記ぶれみたいなもんなんだな。
商品登録がない商品を売ってる可能性とかも全然思いつかなかった。 >>674
外部キー無いけど繋ぐって、どんなシチュエーション?? >>677
結合条件をFROM句にしたのは標準SQL。ただ構文が長ったらしいのは失敗だった。 >>672
推奨されない?
そんな嘘を書くな。
製品によって結合条件の構文の一部が非推奨になっただけ。 >>677
上の世代からするとなんでFROM句に書きたがるのか疑問なんだよ。 どのテーブルにも脳死したかのように
createdとupdatedっていうtimestampなカラムがあるんですが普通なんですか?
都道府県テーブル
id 県名 作成日 更新日
1 北海道 2018略 2018略
2 岩手県 2018略 2018略
こんな具合に定数のような項目にもあります >>681
結合の条件なのか検索の条件なのかが分かりやすいからだろ Whereに結合条件書くと順番が制御できないから外部結合で結果が不定になることがあるってのがあったな >>682
テーブル設計の基本ルールとして定めていることは特に珍しくはないと思う
本当に必要か?という議論をすることは可能だが
どっちに転んでも誰も得をしないので誰も言い出さない 普通かどうかよりも、テーブル設計書を見た方が良いかと >>683
それを言い出すとWHERE句が不要になる。絞り込み条件もFROM句に書けるし、若い人間で知識がないとひとつのテーブルでレコードを絞り込んで結合させた方がいいなどと言い出して、全部FROM句に行ってしまう。 >>684
根本的にSQLをわかっていない。SQLの書き方で処理が決まるわけではない。 >>682
自分がシステムのテスト、運用・保守をしていたらわかるよ。複数人でテストをし始めたら、誰がいつ作ったのか、誰がいつ更新したのかわからなくなり、チーム作業が成立しない。 >>690
>SQLの書き方で処理が決まるわけではない
から、そのときの実行計画次第で結果か変わるって話だけど?
意味わかってレスしてる? where句に結合条件を書こうとすると外部結合のとき困るよな
Oracleは(+)を使ってwhere句で外部結合が今でもできるけど推奨してない
SQL Serverでも似たような演算子が昔あったけどもうサポートされてない from句は、集合を作る処理で、where句とselect句で選択範囲を決定しているんだろ? >>692
製品は人間の感覚を意識して実装されているが、SQLの仕様ではない。 >>694
RDBの教科書的に言えば直積(from)→選択(where)→射影(select)だな。 >>695
SQLの仕様的に不定な結果を除去できないから推奨しないって話をしてたんだけど
製品ってなに?SQLが人間の感覚を意識して実装されてるって?
3値論理とか、不定な結果とかが感覚的なのかよ。常人とは違う感覚もってるらしいな 言うことはわかるが、具体的にどの製品のデフォルト設定を想定しているのか?
外部結合の構文は、どの製品も標準SQLの構文にも対応するが、個々の製品の独自拡張もまた進んでいる。
あなたの言うことで気になるのが、実行計画によって結果がかわるという点で、そんなポンコツ製品は使わない方がいい。 議論するときはID表示にするかトリップ付けてくれよ
誰が何を言っているか追いかけられない >>698
製品がポンコツなんじゃなくて、SQLのあいまいさの問題
まあ俺もかなり信じられなかったからな
実例もどっかで見たんだが見当たらん
AとBを外部結合したものにCを外部結合するのと、
BとCを外部結合したものにAを外部結合するのとでは結果が変わる
whereでの外部結合ではこの違いを表現できん、てな話だったはず
from A,B,Cと書くと、感覚的には前者で処理されると思い込むが
事項計画次第で後者で処理されることもあり得るって話だったはず >>700
OUTER JOINが導入される前の外部結合は製品毎の独自拡張なんだから
そこにあいまいさがあるならその製品の問題になるでしょ。
それともOUTER JOINにまだ曖昧さが残っているということ? >>701
だからwhereでの結合は推奨しないって話じゃないのか 「だから」ってのはどこに係ってるの?
>>684が言っているように結果が不定になるというのはどの製品のことかって話なんだけど。 >>700
外部結合の条件が書かれていない。結合条件が異なるから結果が変わるのを実行計画の違いだと思っているのか? >>703
たしかオラクルだったはず
今探しても見当たらん。結構トリッキーなSQLではあった気がするんだが
原理的にwhereで外部結合すればどのDBMSでも起こり得るはずで特定製品の話ではないんだが
>>704
まったく同じSQLで結果が変わる事があるから不定って言うんだけど
まあ俺はwhereで結合する事はそれ以来やめたからもうどうでもいいや
実例だせない時点で説得力低そうだしな Oracleなら、解釈があいまいになりそうな記述は最初から弾かれたと思うが。
>原理的にwhereで外部結合すればどのDBMSでも起こり得るはずで特定製品の話ではないんだが
原理的もなにも、SQL標準のfromとwhereだけではそもそも外部結合を表現することはできないんで
各製品が独自に拡張していたわけ。そこに問題があるなら当然その製品の問題。
ってのは上で何度も指摘されているんだが。 >>708
>>35で[KEY]を"KEY"にすれば標準SQLになると思う
IDが予約語のDBもあると思うが標準では予約語じゃない 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" >>711
MAX(KEY)とWHEREが巧妙ですね >>711
検証してみたんですが、
TableBに(8,2,3,'b_key3')を追加し、検索KEY=3にした時、
一番若いKEY=1を持って来れてません ?
2より若いじゃ無くて2が無ければ一番若いKEYなのかな
KEY=3,4,5の場合3になる? なんかSQL貼り付けようとすると書き込みに失敗する
何故だ 連投スマン
何度か試したけど直接SQL書くとエラーになるっぽい
https://ideone.com/UrWptx >>33みたいに場合分けを含むようなのは素直にunion allでやる方が見通しが良かったりする。
記述は冗長かもだけど。 >>718
最初、>>716の16行目以降のSELECT文を書き込もうとしたら失敗したのよ
>>711だと書き込み成功してるのに何故だろうか?
どの部分が問題になっているか知ってる? チェックは途中のクラウドで行っているようです
SQLの特定のキーワードに反応しているみたい
引っかかるときもあれば引っかからないときもある
その辺の基準はよく分からないです
チェックする検査項目が変わるのかもしれない >>720
ありがとう
書いてみてエラーになったら外部サイトに貼るしかないか 手間だけど、それが一番良いと思う
後は全角文字に置換して貼り付けるくらい
汚くはなるけど、説明と合わせて書きたい時は
こうすると良いかな 初めて質問させていただきます
SQLからPostgresへのデータ移行をC#使ってプログラム作ってます
csv吐き出しで移行させたいんですが、ダブル型のカラムのデータが.000や10.600という形で入ってるのですがどうにか0にする・余計な0を無くすことが出来るのでしょうか?
またそういう事が吐き出しの際指定出来るのでしょうか?
吐き出しはbcpでフォーマットを読ませてます FORMAT()関数とか言うのがあるんじゃねぇの?よく知らんけど >>723
SQL ServerのことをSQL
CSVファイルのデータをわざわざC#でインポートプログラムを作ってインポート
エクスポートや出力にあたる言葉が「吐き出し」
初心者なのかクソ経験者なのか? >>725
自己解決しました
申し訳ない急ぎだったのでそういう書き方になってしまった
C#は移行という一貫性のあるプログラムです
SQL serverからPostgresへの移行と書いてあるように
目的の為の柔軟性もあるという意味合いで情報を付加しただけに過ぎないです 文字でデータを移行するのに数値型のデータをどう表現するのか指定を行っていない時点で初心者。 >>727
吐き出しはbcpでフォーマットを読ませてます
>>728
問題は別にありました
思いっきりbcp時にNULL文字の空白が…と警告が書いてあるのにも関わらずNULLIFでRTRIM関数を使用していないことが原因でした
ちなみに.000は0には出来ませんでしたがコンバートで代用しました 根本的にアプローチ方法が違う様な気がする
山に登るのも好き好きだから
逆立ちして登りたい人もいるだろうし 今度はbcpの使い方を知らなかったということか。何もかもダメだな。 bcpの使い方ってよりbcpの相互関係に気付けなかっただけだろ auto incrementって指定しなくても勝手に連番いれてくれないの? autoincrementのカラムを何も指定しないでinsertしても入らないのですか? それは無理だろう
作成時に指定した制約の範囲で値は入る じゃあ空のテーブルに1から連番のidを入れたいときどうしますか? 取得時に連番を振れば良いので、そもそもの要求が正しくないと考えるべきだな >>742
取得時?自分で連番を入れろってこと?
>>743
postgresqlです データベースってどういう仕組みなの?一つのテーブルにファイルどれくらい使ってるの? >>741
必ず連番でないといけないか、まずはそこを考えた方がいい。 >>744
同時実行時にどうやって連番が振れるのか考えた方がいい。
ユーザーがよく連番にしてくれというが、データそのものが連番を持っている必要はない場合が多い。
シーケンスを使うと歯抜けになるが、歯抜けで何か問題がどうか聞け。
どうしてもやりたければ、番号を管理するテーブルを用意して、一瞬、テーブルをロックして最大値を求めてレコードを追加したり更新したりすることで実現する。
レコードが削除されたときは番号を降り直すのかどうかも事前に聞け。
ユーザーは単に表示されている件数とデータの番号が一致していたら、わかりやすい程度のことしか言っていない。 >>746
これが何なのか読んでもわからんすw
というかORM使ってるのでこの型使えるのだろうか
>>747
>>748
確かに連番である必要は無いです
適当に被らない番号を振ってもらえれば良いんだけどそういう句はあります? >>750
どういうやり方で最初の空のテーブルを作成してますか? >>750
シーケンスを作って、シーケンスから新しい番号を取る。
製品によって異なるから「PostgreSQL シーケンス NEXTVAL」のキーワードでくぐって勉強して。 >>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かりませんでした >>752
質問をいくつか
idを連番にして一意にしたいって事ですか?
dateをプライマリキーにしていますが、
このテーブルデータのデータを一意に特定したいときに
dateを指定するって事ですか? date DATE NOT NULL,
PRIMARY KEY (date) >>746の回答で終わってる話だし、自分で調べる気がないようだから
これ以上構わないほうが良いぞ >>755
date で一意にしたいです
>>758
つまりカラムの型をSEREALにすれば良いんですね PRYMALY KEYにしか使えないんですね 何をしたいのかがよく分からないけれど
率直に言うと、テーブル定義を見ただけで、これは酷いと思った
ここで質問するにしても基本が出来ていないと
質疑そのものが成り立たないと思う
一つ一つ教えてやれるほど暇な人はここにはいないと思うので
まず自力でテーブル設計の基本から学び直した方が良いだろう う〜ん厳しいっすね、
達人に学ぶDB設計指南書
という本を読んで出直してきます
ありがとうございました。 教えてください。
12c ってWindows10Homeには対応していないのでしょうか?
インストールしようとすると、最初の段階でフリーズしてそのままなんですが。。。
それとも自分のやり方が間違っているのか? > それとも自分のやり方が間違っているのか?
Yes.
Oracleに聞け >>762
Windows 10 Homeには対応していません。Windows 10 HomeはIT技術者が使うようなものではありません。 Windows10でも64ビット版なら対応してるみたいだな >>762
Win10Home x64 に Oracle12c 入れてるよ
Release2 だと言うように途中で止まったけど Release1 は最後まで行った こういう勝手な組み合わせで使って文句をサポートに言ってくる会社は必ずある。 >>766
視力検査で「みぎ」と言えば視力1.2と判断される。 基本情報の古い過去問のデータベースが解けません。解説してください。
平成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行の場合、真となるようでした。
よろしくおねがいします。 >>772
ALLは真偽値を返すのではなく、副問い合わせの結果すべてに当てはまるかどうかの条件構文。 >>772
結果リストがゼロ件の場合は、FALSEでもNULLでもTRUEでもないため、条件そのものがない扱いになる。 正確には結果が返らないため、どの年齢もTRUEになってすべてのレコードが対象になる。 SELECT文の結果の対象レコードが存在しない状態はNULLではない。 >>772
ALLはその副問い合わせが空のときはTrueと決まってるから
イマイチ直感的ではないけど、そう決まってるからしょうがない
条件そのものが無い扱いになったりするわけじゃない
ALL条件はTrue/Falseを返す(この場合はTrue なぜならそう決まっているから) MySQLの使い方に悩んでる。
WebアプリケーションでToDoリスト作るとして
ToDoリストのデータとして5つのテーブルが必要です。
Aさん、Bさん、Cさんがそれぞれ保存し、各自、自分が登録したToDoのみが見れます。
このような場合、SQLサーバでは、Aさん用データベース、Bさん用DB、Cさん用DBを作成する。
という使い方は変ですか? >>779
補足、使用人数は例では3人ですが、100人以上の可能性あり ひとつのテーブルで行ごとにアクセス権を設定できるDBMSもあるにはあるけど
(MySQLでできるかどうかは知らん)
アプリケーション側で制御するのが普通
ユーザーごとにテーブルを分けるのは普通じゃない MySQLでもユーザー毎にdatabaseを割り当ててアクセス権を設定すれば出来ないことはないが
そこまでする必要があるのって、ユーザーにテーブル作成や削除までやらせたいときくらいじゃないか? ありがとうございます。>>779です。
SQLに対してDBを作ったり、テーブルを作ったりするのはToDoアプリ側で、ユーザーはToDoアプリの操作のみです。
アプリの保存データをSQLで管理したいという話なのですが、
こういうときは、データベースごとに分けるのが普通ではないというなら、普通はどんな方法で管理するのでしょうか?
@ 一つのDB内に、Aさんのテーブル5つ。Bさんのテーブル5つ作る 。(テーブルが増えていく)
A 一つのDB内に5つのテーブルがありその中でAさんのレコード、Bさんのレコードを作っていく。(レコードが増えていく)
B 名前をつけて保存で、新しいDBを作りその中に5つのテーブルを作る。(DBが増えていく) 人が増減するのに合わせてDBやテーブルを増減するのってその管理がまた
大変だろ…。これ言うとここで鬼門の削除フラグが〜になってしまうけどw 昔、IBMが作ったシステムの設計見たらビューで権限のあるレコードだけ表示できるようにしていた。
そんなんでパフォーマンスが出るのかと思ったけど、結構大規模なDWHでもそこそこの速度が出ていた。
もしかしたらIBMのチューニング力のなせる業だったのかもしれないが。 >>784 ありがとうございます。ということは、ユーザーの操作により、DBやテーブルの作成はあまりしない方が良いということですね。
アプリ起動時に、DBが無ければ作成したかったんですがそれもやめた方がいいのか?事前に作成しておくのが普通?
>>785 なるほど、ビューを使えば個人毎のテーブルとして扱えるって事ですね。
SQL文は理解したんですが、全体的な使い方がイマイチでして、こういう時に役に立つ書籍が何かあれば教えて下さい…
使い方なんて人それぞれっていうのは分かってるんですが。 >>786
>事前に作成しておくのが普通?
普通は動的にテーブル作ったりしない
>アプリ起動時に、DBが無ければ作成
WEBアプリだよな
アプリってクライアント側かサーバ側かどっちのことを言ってるんだよ
普通クライアントが直接DB弄ることなんかないだろ
つか設計スレいけ >>786
ひとりずつ分けて管理するというのは紙媒体の考え方だから、素人がそういう設計を思いつくのは理解できる。
ただし、リレーショナルデータベースの世界では、かなりおかしな発想。
操作できるのが自分のデータのみであれば、自分のデータかどうかどうして区別できないと思うのか?
権限という概念がどうしてあるのか、勉強した方がいい。 >>688
>>689
ありがとうございます!
もう少し考えて勉強します。 >>681
横だけど上の世代はWHERE句に結合を書いてたの? いわゆる結合条件のことだろう。
θ結合は直積から選択するのと等価なんでSQL89まではそういう風に表現してた。 Oracleに限って言えばシステム内部で組み込まれてるビューは
今でもWHERE句の結合だけじゃないかと思えるレベル >>791
ちゃんと製品のマニュアルを見たことがあるのか?
SQLの歴史上、結合条件はWHERE句に書き、FROM句には書けなかった。 >>794
マニュアルなんてあるんだ
見たことないよ >>794
勉強んなるわ
でもFROMに書けるんだから今はWHERE句に書く必要もうないってことだよね? 最初に現場でoracleを習って
そこでは(+)が多用されていた
その後外部結合というのを習ったけど
join句、いまだに使い方慣れなくて困る へぇー
じゃあぶっちゃけ今はJOINから入っちゃった方が無駄がないのかな? 社員テーブルに以下の5カラムがあります。すべてnot nullカラム。
社員id(主キー)、氏名、所属部署、入社年度、生年月日
社員idはランダムで採番されます。
このとき、
所属部署ごとに以下を満たす1人の氏名と生年月日を抽出するとき、
どのようなSQLが考えられますか?
・入社年度が最も過去
・それが複数人居る場合は、その中で社員idが最大の社員
お力添えよろしくお願い致します。 FROM 社員テーブル T1
WHERE NOT EXISTS (
SELECT * FROM 社員テーブル T2
WHERE T2.所属部署 = T1.所属部署
AND (
T2.入社年度 < T1.入社年度
OR T2.入社年度 = T1.入社年度 AND T2.id > T1.id
)) 803さんのはまだ試してないですが、
group byとhavingで2回絞るのは無理ですかね? >>802
つかってるDBMSかけ
SELECT * FROM(
SELECT
ROW_NUMBER() OVER( PARTITION BY 所属部署 ORDER BY 入社年度,社員id DESC) as 順位,
*
FROM 社員テーブル
) t
where t.順位=1
ウィンドウ関数使えないようなら、サブクエリ3段とかで出来そうだが >>806
ありがとうございます、勉強になりました。
SQL serverです。 MySQLで
select max(`社員id`),`氏名`,`所属部署`,`入社年度`,`生年月日`
from `社員テーブル`
where (`所属部署`,`入社年度`) in
(select `所属部署`,min(`入社年度`) from `社員テーブル`
group by `所属部署`)
group by `所属部署`; >>806
Row_Number wwwwwwwwwwww >>806
そういう使いもんならないの教えんのやめ これから仕事で必要になるためSQL勉強しています。
皆さんはどうやって勉強していますか?
現在SQLBoltってサイトで勉強しています。
覚えが遅いためなかなか覚えられません。
一応ExcelのVBAはできます。
勉強法がわからないのでAccess VBA Standardの資格で勉強した方がいいでしょうか? プログラム言語と違って、何か適当な例題があるわけじゃないし、
割と実践的に体で覚える感じでした
SQLを使用するソフトによって多少、あるいは大きく違ったりするので
SQLをどういう所で使いたいか、ソフトに何を使うかを見極めて学習すると
効果的かも知れません
それから、SQL言語はVBAとは異なるものです >>812
使いものになるまでの所要期間だいたいどれくらい? >>815
すみません横から失礼いたします。
業務上必要に迫られ勉強することになりました。
環境は会社で用意されてますが前任者が居なくなってしまう為、ゼロから始めて1ヶ月半でモノにしろと言われています。
命がけで半年ですか…胃が痛くなってきました。
1ヶ月半など無茶苦茶な要求と言えそうですね(泣)
ちなみにエンジニアさんですか?当方非エンジニアです。 複雑さの程度にもよりますから
簡単なものでしたら、1か月も掛からずに習得は出来るでしょう
担当する業務の内容次第です >>817
レスありがとうございます。
段階にもよりますね。
予定されているものを見たところサブクエリ5〜7つ、最後で結合するという説明でした。
かなり長くこんなの書けるのだろうかと気が遠のきました。
テーブルの挿入などはなさそうです。 >>812
私はあまり覚えがよいほうじゃないので、業務が始まる前に
勉強して基本的な知識をつける予定でしたが、
やはり実務をこなして体で覚えるほうが早いのですね。
レスありがとうございます。
>>813
レスありがとうございます。
ゲーム会社で簡単なデバック作業をしています。
SQL覚えるのに半年もかかるのですね。
皆様色々教えてくれてありがとうございます。 >>819
818です。横から質問奪ってたいへん失礼しました。
ちょうど同じような境遇でしたもので。
思ったよりもSQLを身につけるのは時間がかかりそうで覚悟せねばと思いました。
お互い頑張りましょう。 >>820
いえいえ失礼なんて、とんでもないです。
私もSQLを覚えるのがこんなに時間がかかるとは思いませんでした。
大変だと思いますが、お互い頑張りましょう。 >>811
仕事で必要になるならその仕事で使うDBMS使えばいいと思うが
大抵のDBMSは無償版提供してるし このスレの先頭、>>3-10辺りをすらすらと書けるようになれば
大体の業務はこなせるんじゃないかな?w 分からなくなったらここで聞いてみると良いですが、
その際に、ソフトに何を使っているかを書いて欲しいです
ソフトによって使えたり使えなかったりするものがあります Sybase ASEだとOLAP関数サポートなく、
806さんのムリでした
一番エレガントだと思ったのに 初心者の質問続きとなっているようですみませんがお願いします
「SQLの基本構文を書くことができる」というとどういった範囲になりますか? >>803
望んだ結果が出ました。
ありがとうございました。
社員テーブルに該当するものが複数テーブルから構成されたサブクエリだとかなり重くなりました。 Select文のasに( )を使いたいのですが、どうかけばいいでか? ダブルクォートで括るのが普通だが
角括弧やバッククォートを使うDBMSもある >>828
そういったあんた個人のわがままが通ったとして、
で、ユーザー(つまり結果)に優位性があるのか? >>829
レスありがとうございます。
使ってるのはpostgresqlてすが、" ではダメみたいです。
>>830
As 時間 としていたところ、ユーザーから 時間(分) と表示して欲しいとの要望かありました。
()は特殊な文字てあることは理解していますが、何らかの策があるのではと質問したのですが。あまりに非常識なようでしたら諦めます。 postgresなら"でいいはず
なんらかのプログラミング言語を介して使っているなら
そのプログラミング言語に対して"をエスケープしなければならない >>832
すみません、アホなことしてました。
時間"("分")" って…
"時間(分)"でokでした。 まもなく日本から世界経済が崩壊し、世界教師マYトレーヤとUFOが出てくる。
それからベーシックインカムがはじまるので、20年間ヒキコモリの人でも死にはしない。
むしろ、心配するなら被曝のほう。
【メルトダウンA級戦犯】 『非常用発電機』安倍が放置 『非常用空冷回路』小泉が撤去 死刑求刑
https://rosie.5ch.net/test/read.cgi/liveplus/1552357792/l50 >>837
必要なだけ
経験としては10個ぐらいまでやったことある テーブル
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です。 select
No1,
((case No2
when A then 10000
when B then 100
when C then 1
end)
+(case No3 ……)
+……)
from テーブル >>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 >>840
>>841
>>842
レスありがとうございます。
>>841
ちょっと理解できませんでした。
>>842
やはり、UNION ALL使うぐらいしかないんですね。
少し調べて全く同じものまではたどり着けました。
NOが200ぐらいあるのですが、テーブルの設計自体を見直したほうがよさそうですね。 >>843
そもそもその表で管理しようとしているところが天才 >>839
これはPostgreSQLだけどoracleにもUNNESTはあったように思う
無かったらスマン
https://rextester.com/VNEZX24470 >>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 >>846
> 毎日のレコード数が凄いことになっちゃうなーって。
どんなシステムかわからんけど今時そこら辺のPCでも100万レコード程度は普通に扱えるしOracleでそこそこのサーバー入れてりゃ1億件程度でも破綻しないよ >>847
1次元配列だと200万レコード/日ぐらいが想定されるので、少し厳しいのかなと感じています。
集計前・集計後のどちらもが必要なので、各々のテーブルを作るのが良さそうですかね。 項目にsumA、sumB、sumCを追加しておいて
レコード挿入時に集計しておけば良いのではないか? 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 テーブル 20年前のPCの感覚で考えているんだろうな。しかも巨大Excel風がお好みらしいから無視が一番。 糞メーカー製品のせいでテーブル変えられないって訳でもなく、自分でそういう設計にしてるならしょうがないね decodeとかOracleしか使えないのよりcase when
で記述していったほうがよくね いじめはどこの町にもあるが島本町は特に酷い
「大阪府三島郡島本町のいじめはいじめられた本人が悪い 」なんて
公言する町は他に無い Oracle 12 なら VARRAY とかでもいいかも
ただ操作する関数は貧弱なのでストアド必須になると思うが >>856
知識がないのになんで無理やり書き込むの? Postgres11を使用しています。
3700万行程のテーブルの中途半端な位置に行を追加したいのですが、
通し番号の昇順を維持するにはどうすればよいでしょうか?
こんな構造です。
----------------------------------
主キー | 本文(最大3MB程度)) | 通し番号
----------------------------------
今はこうなっているとします。
--------------------
0001 | あいうえお | 0001
0003 | さしすせそ | 0002
0004 | たちつてと | 0003
--------------------
ここに、1行追加して、以下のように変更したいです。
--------------------
0001 | あいうえお | 0001
0002 | かきくけこ | 0002
0003 | さしすせそ | 0003
0004 | たちつてと | 0004
-------------------- >>858
この穴埋め問題はよく話題になるんだけど、やりたいなら最初からそう設計して採番しないとキレイにできないんだよ。後からやるならアプリ側で調整したほうがうまくいく。主キーならとくに。 >>858
UPDATE テーブル
SET 通し番号=通し番号+1
WHERE 通し番号 > 2
とかではなくて? >>858
update テーブル t1
set 通し番号 = (select Rank
from (select 主キー,
Row_Number() over(order by 主キー) as Rank
from テーブル) t2
where t1.主キー = t2.主キー); 主キーには空きがある前提なのか?
その例だと通し番号要らんように見えるぞ 超初心者の質問で申し訳ないですが
SQLで
顧客情報、順路表から計算して
申請書を作る
医療関係のデータベースは作れますか? >>864
要件が不足しています
計算とは?
2つ表から単に申請書に必要なデータを抜いてくるだけなら当然つくれます >>865
すいません
もう少し詳しく書くと
■顧客情報
A受けている治療内容 (〇〇円)
■順路表
B患者を何回いった(〇〇回)
C前の患者との距離(〇〇km)
■申請書
A、B、Cの数字を元に
四則計算して
それぞれの箇所に数字を入力
して申請書を作成
できるデータベースです >>865
あと
順路表を前月と同じ内容を
翌月にコピーできますか?
※4/1(月曜) Z→E→F
4/2(火曜) L→E→M
なら
5/6(月曜)) Z→E→F
5/7(火曜)L→E→M >>865
現在はEXCELでやっていて
重すぎるので何か手はないか
と考えているところです SQLでできるかというより
これは医療向けアプリじゃないの?
ACCESSで作れますかという話かね
索引とか使えば検索を早くできるからたぶんマシにはなるしデータの複製もできる
発想を跳躍させて
Z、E、Fとか未定義で最短経路問題なのかすら怪しいけど
経路ならグラフデータベースとかある >>869
返信ありがとうございます
Eさんの4月分の申請書を作成するときは
4/1はZ→Eの最短距離
4/2はL→Eの最短距離
で計算します
※Excelでは最短距離だけのシートがあり
Z→Eとすると4/1は最短距離だけのシート
から情報を抜き出しZ→Eの最短距離で計算します
Accessで作れますか?
調べたら
Excelと同じOfficeですし
SQLもあるそうですね
それと
検索機能とかでスピードアップ期待
データの複製はしやすそうですね 現状のスタイルを頑なに守るよりも、市販のパッケージに業務形態を合わせたほうが幸せになれると思う。 SELECT key, 名前, 住所, 電話番号
FROM usertable
WHERE (key = (SELECT MAX(key) AS EXPR1 FROM usertable usertable_1))
このSQLは何をしているのでしょうか?
特に、EXPR1が分からないのと、FROM後に、DBには存在しないusertable_1というテーブルが指定されているのが理解出来ません。 >>872
EXPR1はMAX(key)の項目名、
usertable_1はusertableの一時的な名前
と名前を付けているだけです
が
このSQLの場合は特に名前を付ける意味はありません >>872
無駄なテーブル別名、カラム別名があり、さらに無駄な括弧がある。
こうなった経緯は読み取れない。 項目別名はけっこうasつけるひと多いな
テーブル別名にはみんなつけないけど >>871
ならない
他業界しかやってないやつに
現場の気持ちはわからない
どんなソフトよりも
自分のExcelが一番
今後さらに良くするための質問 SQL標準では昔から列別名もテーブル別名もASをつけて良いのだが
なぜかOracleでは昔からテーブル別名にASをつけられない >>878
それは誤り。Oracle Databaseでは特定のバージョンだけASを使用できないものがあった。 ExcelのクエリはASで別名付けても無視するのが残念 >>881
ExcelのSQL操作はおまけ機能みたいだからなあ。特定の文字が使えなかったりとタチが悪い。 そもそもデータベースが何かを理解してないな
表計算ソフトとは別物
計算や出力が必要ならプログラム書く必要がある ウェブのニュースを集めてとにかくデータベースに放り込み必要なものを取り出すことをしていたのですが
先日からこのようなエラーが出てデータを取り出した結果が取れなくなりました
データが取れることもありますがたまにうまく行くといった感じです
エラー:[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サーバーのエラーログにエラーは見当たらずいろいろやりましたが困っています
解決方法を教えてください クエリを飛ばして30秒ほどでエラーが返ってきます
エラーコードで検索してnet_read_timeoutをいじったり
/*+ MAX_EXECUTION_TIME(1000) */を入れてみたのですが結果は変わりません
データベースの行数は680421です
よろしくお願いします ありがとうございます。どうすればいいですか
クエリを変えるか、データベースの設定をいじるか調べてみましたがわかりません >>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サーバーのことでもないぜ >893
sql晒してみれば?
ココ、sqlスレだし ありがとうございます。SQLは以下です。範囲を短くしても長くしても前述のエラーが出ます
SELECT * FROM table1 where input_time BETWEEN '2019-05-01 00:00:00' AND '2019-05-01 00:10:00'; >>896
input_timeにインデックス張ってる? >>897
ありがとうございます!データの件数は68万です。
input_time日インデックス張ってみます >>889 これが元の話だけど、問題の切り分けが全然できてない。
「SQLサーバー」とは何? >>904
SQL Serverじゃないの?違うの? >エラー:[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サーバーと言ったんだと思う まあよくわかってない人がデータベースとSQLをごっちゃにしちゃうとかはありがち
>>893がちゃんとログをコピペしてる所はほめていいと思う 昨日はありがとうございました。>>908はその通りです
インデックスを張ると今度は要求された名前、または序数に対応する項目がコレクションに見つかりません
のエラーが出るようになったのでインデックスをちゃんと張る所からやってみようと思います
ひとまずありがとうございました >>888
Excelからデータベースに対してSQL文を投げて、結果をワークシートに取り込むまでの機能の話だろ。
かなり初期からある機能だぞ。 UPDATE のときのテーブル名に正規表現またはワイルドカードを使う方法を教えてください。
例えば、table_a_001〜table_a_100が合った場合に、「table_a」が含まれるテーブルだけ一括でupdateしたいです。
イメージ的にはこんな感じに
UPDATE `table_a_*` SET `type`='hoge'
宜しくおねがいします。 >>915
> 例えば、table_a_001〜table_a_100が合った場合
その時点でおかしいから設計を見直せ
どうしてもしょうがない場合はテキトーなスクリプト言語でSQLを生成して流せ 金と技術力がないと運用にツケがまわるよくある悪例だね テーブル名の001〜100に意味があるなら、その値を項目に追加して
全部を一つのテーブルにまとめてしまえばどうかな? 001〜100は例えで書いたんですけど、実際は日付なんです(_20190510)みたいな
その日付ごとにけっこう大きなデータがあるので日付で分けてるんですが、SQL文だけでtable_aのみを絞るのはやっぱり無理なんでしょうか?
おっしゃるとおりで設計が間違ってるんでしょうけど 日付をテーブル名にするようなデータベースで
その後に更新が必要になるって何かが変だと思う >>920
ストアドプロシージャで動的sqlでも使わない限り無理です 性能的な問題でやっているんならパーティショニングが使えないか検討するところだね。 量が多いからテーブルを分けるというのが、わからんな。
処理速度の問題だとしたら、インデックス付けてないとかw >>920
ひとつのUPDATE文で済ませたいという点からして、トランザクションの概念がないのがわかる。 >>920
データ量が多いという認識がそのものが間違っている。
本当にデータ量が多いシステムを担当しているのなら、こんなところで質問してこない。 質問者をあれこれ詮索するの、感じ悪い
提案までにしとこうよ このスレッドそのものが、ずっと初心者スレになっているから仕方ない。
シェルスクリプトのスレッドでも一発コマンドでできないかと、しつこく質問してるやつがいる。
プログラマがプログラムを作っているのに、なぜかひとつの文に収めないといけない思想信条があるようだ。
こういうのは無視するしかない。 ワンライナーは個人の趣味であって必ずしもソレに付き合わされる必要はないな PHP&MySQLの環境です。
ユーザーID
ポイント
を項目にしたテーブルがあるとします。
ユーザー間で破綻なく自由に任意のポイントを送受信するにはどのようなコードを作成すればよろしいでしょうか?
また、DBサーバが複数ある場合で、同様にDBサーバ越しでも同様のことをしようとするとどのようなコードになりますでしょうか?
秒間数千、数万の処理を行いたいです。
ご教授お願いいたします。 なぜこの程度の知識しかない奴がこんな作業をさせられるのだろうか PHPしか書けないような聞き方っぽいのに
XAトランザクションで秒間数万ね
人をすり潰していたITバブル期みたいなブラックだね
http://q.hatena.ne.jp/1217036141 超初心者ですすいません
likeとisと=の使い分けが分かりません
inの前はlike、nullの前はis、データ型が数字だと=であってますか? なんか1つもあってないような気がするな
"is null" と "is not null"は単語じゃなく文でワンセット
文字の比較でも =
in の前は like ... え? すいませんありがとうございます
比較の時に、=を使ったりlikeを使ったりが、使い分けがわからないのです
isが出てくるのは、isnullとisnotnullだけですか? 超初心者なら、慣用句みたいに暗記した方が良いかもよ like……文字列の部分一致検索につかう
=……完全一致検索
is……null比較の構文の一部
nullの扱いはシステムによりけりなのでシステムごとに調べること なるほど、ありがとうございます
ここの方々はエンジニアですか?
自分はマーケティングの担当で自分で使えた方が便利ということで覚えようとしてます
セレクト文しか使わないのですが、色々な条件で、いつ誰が何を買ったとか抽出したく、サブクエリがうまく使えるようになるのが目標です
またアドバイスいただいてもいいですか SQLの書き方なら、ここで聞いて良いですよ
そういう質問を、みんな待ってますから SQL書かなくてもデータ分析できるツールあるからそれ使う方が良いんじゃない ここにかぎらず不思議なのは5chのスレッドは探せるのに、SQLを解説しているWebサイトや、そのへんに転がっている書籍は視界に入らない人間がいるところ。 >>944
> SQLを解説しているWebサイトや、そのへんに転がっている書籍
そう言うのは能動的に探さないと駄目だから
エスパー機能付きのWebサイトとか書籍があればいいんだけどw 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='山田'; Publisher.Name って名字しか入ってないの? >>946
Publisherには'山田'ってデータがないんじゃない?
よけいなことだろうけど、
Publisherって言うと出版社のことだと思う
著者ならAuthorにしたいところ >>946
連結する場合select でアスタリスク使わない方がいい
連結側に同じフィールド名があるとエラーになるのでasで別名にしないといけない >>946
SQLは問題ないみたいだから
Publisher.Nameに山田があるか確認するために
まずそのSQLのWHERE句をはずしてどういうデータがあるかを見たほうがよいのでは? >>946
テーブル定義 (CREATE TABLE文) を見たいな 946です、みなさんありがとうございます
SQLはあってるんですね、よかったです
模範解答は>>949さんが書いてくださってるように、asでテーブルすべてに別名をつけています
テーブル名を指定するときは、別の名前を付けた方がいいんですね
これからやってみます
またよろしくお願いします microsoft sql server 2008
テーブル同士を結合するとき、char型の項目とvarchar型の項目とで
結合するときはconvertで型を合わせる必要があるでしょうか?
この項目はマスタテーブルの主キーなのですが、
伝票テーブルに外部キーとしても存在します。
伝票側の項目には必ずしも値が入るとは限らず、空白も存在します。
そのためマスタテーブル側をchar型に、伝票テーブル側をvarchar型にし、
それぞれで外部結合します。 そもそもなぜ型を合わせないのか
値がないなら、空白じゃなくてNULL入れろよ
まあ世の中にはNULLと空白を区別できない欠陥DBもあるけどなw NULLと空白を区別できない欠陥DBなんかあるかな
長さゼロの文字列とNULLを区別できない欠陥DBなら知ってるけど NULL不許可にしてるんでしょ
NULL撲滅委員会とかあるし >>958
長さがゼロの文字列だったら、それはNULL値。これが本来のデータベースの定義。 長さゼロの文字列とNULLを区別しないのは
Oracle Databaseの有名な欠陥であり
それはOracle社自身も認識していてマニュアルにも書いてある
https://docs.oracle.com/cd/E96517_01/sqlrf/Nulls.html
> Oracle Databaseは現在、長さが0(ゼロ)の文字値を
> NULLとして処理します。ただし、将来のリリースでは
> この処理が変更される場合があるため、空の文字列を
> nullと同じように処理しないことをお薦めします。 >>963
> ただし、将来のリリースでは
> この処理が変更される場合があるため
まあ、どう見ても無理だろw かなり昔からそういってるからなぁ
そのうちVarchar3型つくるんじゃって話もある 欠陥であることは分かってるんだけれども
直しちゃうと既存のアプリケーションに甚大な影響が出るんで
直すに直せないんですよー
という気持ちがありありと分かるマニュアルだねえ つーか null と空文字列を同一視するというのは極めて常識的な挙動であって
標準SQLの方が時代遅れと言えるのでは
ここはもう標準を変更してnullも空文字列も、ついでに空白だけのカラムもすべて同一視するようにすべき
null は is で比較するとかいう無意味な制限も廃止して全て = の比較に統一すべき
とするのはどう? こんなところでそんなアホ丸出しの提案して
何かが変わると本気で思っているのか 空文字列とNULLが混在して混乱を招いているシステムは多い。 空の文字列とNullを同一視するのが常識とかないと思うんだが
データベースしか触らんやつはそういう常識なの? ホントOracleはシステム開発者にとってマイナスなことしかしないよね 特定のDBしか触らない奴だとそれが常識だと考えるかも
その場合は、そいつには触らない方が良いと思う ぬるい質問ばかりで暴れたくなった
相手はどのDBでもよかった >>973
例えばC言語で空文字列とnullが同じと言ったらそりゃ変なんだが
抽象度が高いSQLで区別する意味は全くないと思うんだよね
むしろ区別することが当然と考えること自体が何か洗脳されてるという気がするわけ
まあ釣りではあるのだが 全項目NOT NULLにして集計処理の手間を減らすことはあるな
CSV/TSVを外部テーブルで使うとNULLが使えないことがほとんどよね
外部結合して片側NULLで引っ掛けるのはよく使うから
NULLの概念自体はあってほしいけど nullと空文字列が区別できなくて良いってやつは、nullが値ではないって概念が理解出来ないんだろうな >>980
その概念に実用性はあるのか?
それで何か便利なことがあった?
むしろ不便であって弊害しかないオナニー概念だと思うのだが
いや >>970 の言う通り、ここで言っても仕方ないことは分かってるけどね
たまには王様は裸だと言って見たくなる あえて釣られてやるけど、例えば未入力と空文字の入力を区別したいとか普通にあるだろ >>983
あるか? そんなの
空文字の入力は未入力でいいんでわ >>985
空文字の入力を未設定と区別する必要があるのかね
それを区別しようとすることでシステムは複雑になり間違いも多くなる セルの値としてはどうかわからないが,テーブル結合後の名テ―ブルの行の属性値としては有りだと思う >>987
そうかねぇ
むしろ使い分けする運用こそ危うい気がするのだが 整数値カラムでouter joinしたとき
存在しない行の整数値カラムの値は
何になるのでしょうか? どうしてオラクルは、ああいう苦しいコメント出しているの? 「sqlなら曖昧でよくね?」っていうけど
連携するプログラム側が困るんよね。それじゃぁ
運用担当がデータ見るだけに使うなら
テキトーでも許されるのかもしれんけど NULLとかnilとかNoneについては、「値ではない」という説明の仕方より、「あくまでも値だけど、約束事として、(概念的に)値なしと呼びうる状況(の一部)に対応する値として利用できる特殊な値」という説明の仕方の方が誤解を招きにくいんじゃないか。
たとえば、空の配列の長さが0、Noneが1個入った配列の長さが1という言語で「Noneは値ではない」という説明はしづらい気がする。
結局、(概念的に)値なしと呼びうる状況のうち、どれにNULL/nil/Noneを対応させて、どれに空文字列・空配列を対応させるか(undefinedがある言語についてはそれも)というマッピングを整理しておくべきという話かなと思うが。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 504日 21時間 44分 19秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。