データベース初心者です。
(机上で学習中のレベル。)
質問用に例えば以下のテーブルがあるとします。
血液型占い。
HUMAN[ID,名前,血液型ID]
BLOOD[血液型ID,血液型,性格]
例えばBLOODには各血液型のデータが既に用意されている。
[1,'A','几帳面']
[2,'B','美人']
[3,'O','めんどくさがり']
[4,'AB','よくわからない']
UIから名前と血液型を入力するとHUMANに
ユーザーデータが登録されます。
HUMANテーブルでは血液型ではなくて血液型のIDを入れます。
この時に登録するためのSQLの書き方ですが
例えば、'山田','AB'と入力された場合(ここではIDは1と入れる)
以下のSQLの記述が正しいでしょうか。添削をお願いします。
これでも問題ない事は分かっているのですが
これが正しいやり方なのかが分からないので宜しくお願いします。
INSERT INTO HUMAN
SELECT 1,'山田',B.血液型ID
FROM HUMAN A,HUMAN B
WHERE A.血液型ID = B.血液型ID
No.3ベストアンサー
- 回答日時:
#1です。
前回答えを書いたつもりだったので、補足になりますが。。
>なるほど、FROMでAを指しているところでエラーというわけでしょうか
エラーはおきません。SELECT文の結果がゼロ件で何も登録されないというだけです。
>この点も合わせて、SELECTにDISTINCTをつけて以下のようにすれば解決するでしょうか?
なぜBLOODテーブルだけにしたのにDISTINCTが必要と思いましたか?
BLOODテーブルはマスタですから、データは4件だけで重複はありませんよね。
このあたりが机上学習の弱さですかね。。
無料で使えるものを入れてみては?
No.2
- 回答日時:
先ず、DBシステムによりJOINの記述方法が異なります。
また、バージョンにより違いがあることも珍しくありません。
よって、「Oracle10gでは」とか「Accessでは」という記述が必要です。
次に、掲題のSQLですが、これは正しくありません。
INSERTする情報の中にHUMAN由来のものがありませんよね。不必要な
結合は間違いの元であり、例え期待通り動作しても効率が悪いのです。
尚、#1の方の回答は方言が無いので、大抵のDBで、このまま使えます。
この回答への補足
ご回答ありがとう御座います。
>INSERTする情報の中にHUMAN由来のものがありませんよね
なるほど。考えが甘かったです。
これが
#1さんが指摘されたバグに繋がったという事ですね。
>・HUMANに1件もデータがない場合、何も登録されません
No.1
- 回答日時:
たぶん、以下のように書きたかったのだろうと思います。
(投稿する直前に見直しをお勧めします)
INSERT INTO HUMAN
SELECT 1,'山田',B.血液型ID
FROM HUMAN A,BLOOD B
WHERE A.血液型ID = B.血液型ID AND B.血液型='AB'
記述としては間違ってはいません。
でも正しいやり方ではありません
・HUMANに1件もデータがない場合、何も登録されません
・HUMANに2件以上AB型の人がいたら、山田さんのデータを2件以上登録しようとします。
(で、主キー制約でエラーになるでしょう)
以下のものでよいでしょう。
INSERT INTO HUMAN
SELECT 1,'山田',血液型ID
FROM BLOOD
WHERE 血液型='AB'
回答、ありがとうございます。
すみません、間違っていました。
このように書きたかったのです。
INSERT INTO HUMAN
SELECT 1,'山田',B.血液型ID
FROM HUMAN A,BLOOD B
WHERE A.血液型ID = B.血液型ID
これでも以下の問題があったのですね。
気づきませんでした。勉強になります。
>・HUMANに1件もデータがない場合、何も登録されません
なるほど、FROMでAを指しているところで
エラーというわけでしょうか。
>・HUMANに2件以上AB型の人がいたら、山田さんのデータ
ごもっともです。
この点も合わせて、SELECTにDISTINCTをつけて
以下のようにすれば解決するでしょうか?
INSERT INTO HUMAN
SELECT DISTINCT 1,(記入された名前),血液型ID
FROM BLOOD
WHERE 血液型=(選択された血液型)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 生物学 高校1年の化学です! 今、抗原抗体反応と血液型をやっています。 A型は(抗B抗体)を持っているから、 3 2022/11/28 11:00
- その他(悩み相談・人生相談) 血液型で性格,人格が違う、と信じて居る方に質問です。 骨髄移植をしたら血液型がドナーの血液型に変わり 2 2023/02/01 19:10
- 生物学 いわれなき差別を受けてます。血液型差別です。私はAB型ですけど良い事を言われた事が有りません。 例) 3 2023/01/30 23:46
- その他(悩み相談・人生相談) いわれなき差別を受けてます。血液型差別です。私はAB型ですけど良い事を言われた事が有りません。 例) 3 2022/05/04 23:00
- その他(悩み相談・人生相談) 血液型で性格って変わるんですか? よくテレビなどでこの血液型はなになにのタイプだとか、友達との会話で 7 2023/02/07 16:56
- その他(芸能人・有名人) どの血液型の女優が好き? 1 2023/04/29 15:11
- 婚活 付き合う相手の血液型の恋愛相性って気になりますか? また、ネットに書いてある恋愛相性って実際のところ 3 2022/04/05 12:43
- 医療 血液型聞くのが好きです。 血液型で人を判断しがちで何型かもよく当てる事ができるんですがみなさんは血液 16 2023/04/16 17:58
- その他(悩み相談・人生相談) AB型に個性的な人が多いのは気のせいでしょうか? 血液型と性格との関係に科学的な根拠はないそうですが 5 2022/09/04 10:48
- 出産 血液型についてです 旦那の家族はAa型しかいない家族です。 私の家系は、父AB型、母O型で 子供は、 3 2022/06/30 16:52
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
テーブルで一番古いレコードだ...
-
このISAMでは、リンクテーブル・・
-
Oracleで上書きImportはできま...
-
ACCESSで容量が50MBになった...
-
Accessのテーブルデータを一気...
-
「クリップボードにコピーされ...
-
アクセス レコードセットを更...
-
同一テーブルのデータを参照し...
-
ユニオンクエリで複数ファイル...
-
Access無いけど.mdbが見たい!
-
phpMyadmin(さくらSV)で検索が...
-
処理の途中で停止させ、再開さ...
-
MS Accessを共有した際にファイ...
-
Access2000でAccess97のテーブ...
-
結合テーブルでINSERTする方法...
-
mysqlのデータの上限ってありま...
-
access2000 オートナンバーで...
-
住所のDBテーブル、マスターの...
-
複数のテーブルを参照するselec...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
ビューのソートについて
-
Oracleで上書きImportはできま...
-
結合テーブルでINSERTする方法...
-
accessでレコード更新直後の反...
-
このISAMでは、リンクテーブル・・
-
アクセス レコードセットを更...
-
重複クエリを使ったデータ削除
-
処理の途中で停止させ、再開さ...
-
マテリアライズドビューとスナ...
-
同一テーブルのデータを参照し...
-
ERROR1062:Duplicate entry.......
-
「クリップボードにコピーされ...
-
ORA-01401が表示され、データが...
-
ACCESSで容量が50MBになった...
-
Accessでの稼働日数計算の方法
-
構文エラー : 演算子がありませ...
-
MS Accessを共有した際にファイ...
おすすめ情報