![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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で質問しましょう!
似たような質問が見つかりました
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- PHP プログラムコードを入力する場合改行してもいいですか? 2 2022/10/02 16:05
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Oracle SQL update方法 2 2022/06/22 14:07
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
VIEWの元のテーブルのindexって...
-
入力値と外部キーをINSERTするには
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
inner joinをすると数がおかし...
-
MySQLのDATE型カラム値がNULLの...
-
ある条件の最大値+1を初番する...
-
クエリ表示と、ADOで抽出したレ...
-
同一のユーザー、同一商品のと...
-
複数のUPDATE文の実行
-
全角文字を含む行を検索
-
Updateの複数テーブル条件時のL...
-
エクセルの関数について教えて...
-
テーブル作成です。どこかのス...
-
php+mysqlで複数選択削除について
-
MySQLのint型で001と表示する方...
-
別のDB(Table)からの複数行の...
-
書籍の内容はまともでしょうか?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
副問合せの書き方について
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
select文のwhere句に配列を入れ...
-
VIEWの元のテーブルのindexって...
-
PL/SQLの変数について
-
マイクラPC版のコマンドで効率...
-
エクセルの関数について教えて...
-
SQLにて特定の文字を除いた検索...
-
sqlで、600行あるテーブルを100...
-
Access パラメータクエリをcsv...
-
Unionした最後にGROUP BYを追加...
-
inner joinをすると数がおかし...
-
複数テーブルのGROUP BY の使い...
-
ある条件の最大値+1を初番する...
-
MySQLのint型で001と表示する方...
-
クエリ表示と、ADOで抽出したレ...
-
[MySQL] UNIQUE制約の値を更新...
-
テーブル名を省略して「h.id」...
おすすめ情報