
insert into文で思ったような結果がでません。SQL文にお詳しい方、ご教授いただけますでしょうか? SQLは初心者レベルです。
期待している結果:
テーブルT-BBSにT-USRのusr-id全リストを入れて、T-BBSのa,b,cには固定の数値を入れたいと思っています。
テーブル例:
テーブル名:T-BBS ,カラム:usr-id,a,b,c,
テーブル名:T-USR, カラム:usr-id
結果
user-id | a | b | c
2 |1 | 2 | 3
3 |1 | 2 | 3
4 |1 | 2 | 3
7 |1 | 2 | 3
私が考えたSQL文ですが、
INSERT INTO
T-BBS(SELECT user-id FROM T-USR,1,2,3) →×(文法エラー)
INSERT INTO
T-BBS(user-id,a,b,c) VALUES (SELECT user-id FROM T-USR,1,2,3)→×
文法エラー
INSERT INTO
T-BBS(user-id,a,b,c) VALUES ((SELECT user-id FROM T-USR),1,2,3)→×サブクエリが複数行を含んでいる
ちなみにデータベースはH2 Databaseというものみたいですが、mySQLと方言は同じという認識をもってます。
以上宜しくお願いします。
No.1ベストアンサー
- 回答日時:
なぜFROMに1,2,3を書いているのでしょうか?
INTO T-BBS
SELECT user-id,1,2,3 FROM T-USR
みたいなのではダメですか?
この回答への補足
ご指摘のように前述の1番目、2番目は変に感じます。
イメージ的には、
INSERT INTO
T-BBS(user-id,a,b,c) VALUES ((SELECT user-id FROM T-USR),1,2,3)
みたいにしたいと思っています。(ニュアンスが伝わりますでしょうか?)
また T-USRには a=1,b=2,c=3 のカラムは含んでいません。
ご回答のお礼をつけ忘れていました。
後述のchukenkenkouさんのご指摘によりyambejpさんの指摘されたやり方でできるのではと思い実行すると思った結果を得ることができました。
実行確認もせずすいませんでした。またご回答に感謝します。
しかしながらよくわからない点がありまして、
SELECT user-id,1,2,3 FROM T-USR という下りを思うと
T-USRには1,2,3を含んでいないような気がするのですが、含んでいなくてもinsertすることができました。
insertはこういうものだと思うしかないのでしょうか、、、?
No.3
- 回答日時:
>T-USRには1,2,3を含んでいない
SELECTはたんにテーブルにある値を表示するというものではない
ということを理解した方がいいです。
SELECT 1+1;
SELECT NOW();
など表現できます、この場合FROMさえいりません。
今回のケースだと、1,2,3はスタティックな値ですから、
SELECTのところに直ガキすれば問題ありません。
ご回答ありがとうございます。
>SELECTはたんにテーブルにある値を表示するというものではない
・・・・なるほど。身にしみました。
select current_timestamp
(現在の日時)
でなぜ表示されるのかも納得です。
重ねてご教授ありがとうございました。
No.2
- 回答日時:
>テーブルT-BBSにT-USRのusr-id全リストを入れて
>ちなみにデータベースはH2 Databaseというものみたいですが、mySQLと方言は同じという認識をもってます。
まず、提示された表名、列名は、実際にテストしているものですか?
「-」は減算と判断されるため、「-」を含む名前を使い場合は、「"」などで囲む必要があります。
「など」としたのは、この部分にMySQLなど一部RDBMSでは、独自仕様があるためです。
標準SQLや主要なRDBMSでは、予約語や特殊記号を含む表名や列名を使いたい場合、「"」(二重引用符)で名前を囲みます。
しかし、MySQLでは「`」(バッククォート)で囲むという仕様です。MySQLでは、「ANSI構文モード」にしてサーバを起動しなければ、「"」(二重引用符)で囲まれたものは、文字定数として扱われます。
SQL Serverなどマイクロソフト製品では、[ ] で囲むといった仕様もあります。
文法エラーとだけ書くのでなく、具体的なエラーメッセージを提示するようにしてください。
MySQLと同じなら、
INSERT INTO `T-BBS`
SELECT `user-id`,1,2,3 FROM `T-USR`
といった記述ではどうでしょうか?
あるいは、MySQLと同じでなく標準SQL準拠なら、
INSERT INTO "T-BBS"
SELECT "user-id",1,2,3 FROM "T-USR"
ではどうでしょうかね?
この回答への補足
chukenkenkouさんご回答ありがとうございます。
ご指摘のごとく 実際のテーブル名でありませんでした。
不正確な質問で皆様すいませんでした。
また テーブル名は正確にはT_USR でした。
・mySQLが標準と思っていましたので、ご回答はとても役に立ちました。
>「-」は減算と判断されるため、「-」を含む名前を使い場合は、「"」などで囲む必要があります。
結果的には:INSERT INTO T_BBS SELECT USER_ID,1,2,3 FROM T_USRで
思った結果を得ることができました。
腑に落ちないのは、T_USRには1,2,3をもっていなくてもINSERTできるのだということとです。どういう解釈なのでしょうか?
(SELECT USER_ID,1,2,3 FROM T_USR)・・・こういう塊に見えてしまうのですが、、、
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
select文のwhere句に配列を入れ...
-
エクセルの関数について教えて...
-
入力値と外部キーをINSERTするには
-
PL/SQLの変数について
-
URL と行番号の指定
-
キー毎の、ある列のmaxのレコー...
-
SQLサーバから、項目の属性(型...
-
SQLで残高計算
-
武漢からのチャーター機
-
accessのチェックボックスをSQL...
-
MySQLのint型で001と表示する方...
-
複数テーブルからLIKE検索を行...
-
【Transact-sql】 execの結果を...
-
マイクラPC版のコマンドで効率...
-
”photo id” とは何ぞや?
-
SQLにて特定の文字を除いた検索...
-
所有格の意味
-
レコード削除・sqlインジェクシ...
-
このサイト(ttp://127.0.0.1/p...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エラー 1068 (42000): 複数の主...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
sqlで、600行あるテーブルを100...
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
Access パラメータクエリをcsv...
-
クエリ表示と、ADOで抽出したレ...
-
ストアドのエラーについて
-
マイクラPC版のコマンドで効率...
-
バインド変数について
-
SQLにて特定の文字を除いた検索...
-
副問合せの書き方について
-
【Transact-sql】 execの結果を...
-
”photo id” とは何ぞや?
-
mysql+phpをつかったカートつく...
-
MySQL5.5 viewの処理速度改善に...
-
select文のwhere句に配列を入れ...
-
テーブル名を省略して「h.id」...
おすすめ情報