SQLでこんなことは可能でしょうか。
列 IDとTEXT をもつテーブルA と、
列 IDをもつテーブルBがあります。
テーブルAに、テーブルBのID分のデータを挿入したいです。
TEXTはテーブルAのID=1のTEXTデータを全ての列に挿入します。
このような場合のSQL文を調べてるのですが、
なかなかわからなくて困っています。
insert into select b.id,a.text from tableA as a, tableB as b
でもうまくいきませんでした。
何かいい方法はないでしょうか?
回答お待ちしております。
No.5ベストアンサー
- 回答日時:
#2、#5回答者です。
SQL Serverのバージョンは、何でしょうか?
#2、#5で提示したSQL中の
「select ~ from(select ~ from ~)」
という記述は、標準SQLでも規定され、多くのRDBMSでもインラインビューといった機能名で実装されていますが、SQL Serverでは2005で実装されたらしいことが分かりました。
そのため、やってること(=質問者さんがやりたいことを推測したもの)の確認とSQL Server 2000でも実行可能なSQLを改めて提示します。
SQL Server 2005では、前回提示のSQLで、そのまま動くと思います。
1.提示された条件→こちらでの解釈
(1)表Aには、ID列とTEXT列がある。
(2)表Bには、ID列がある。
(3)表Aに表Bの全行を追加。この時、TEXT列には、表AのID=1の行のTEXT列の値を格納。
→表AのID=1で行を絞り込めるとのことから、列IDはユニークと推測しています。
2.やりたいことの推測
表A
ID TEXT
1 a
2 b
3 c
表B
ID
4
5
6
得たい結果(表A)
ID TEXT
1 a
2 b
3 c
4 a
5 a
6 a
3.SQL例
※列TEXTはTXTと変えています。
(1)SQL Server 2000でのSQL例
insert into A
select B.ID,A.TXT from A,B where A.ID=1;
(2)SQL Server 2005でのSQL例
(1)または、以下のような記述も可能
insert into A
select id,txt from (select txt from A where id=1) as x,B
No.4
- 回答日時:
#2回答者です。
標準的なSQLの構文、意味を知らない人がいるようなので、解説します。
(1)表の列構成
列 IDとTEXT をもつテーブルA と、
列 IDをもつテーブルBがあります。
(2)格納方法
テーブルAに、テーブルBのID分のデータを挿入したいです。
↓
insert into A
select id,txt from ( ~ ) as x,B
テーブルBのID分だから、Bと()内の検索結果(テーブルAをID=1で絞り込んだ1件)を直積しています。
TEXTはテーブルAのID=1のTEXTデータを全ての列に挿入します
↓
select txt from A where id=1
で取り出します。
これを組み立てると、以下のSQLになります。
insert into A
select id,txt from (select txt from A where id=1) as x,B
No.3
- 回答日時:
・単純にTableAへ挿入
INSERT A
SELECT id, text
FROM B
WHERE id = 1
・重複を除いて挿入
INSERT A
SELECT DISTINCT id,text
FROM B
WHERE id = 1
・「ID=1のTEXTデータを全ての列に挿入」を踏まえて、「id=1のtext値をすべての行に更新」と解釈して
UPDATE A
SET text = (SELECT b.text FROM b WHERE b.id = 1)
No.2
- 回答日時:
文章だけでの説明では分かりにくいので、基の表と得たい結果を明示するといいですよ。
>insert into select b.id,a.text from tableA as a, tableB as b
insertの構文自体間違っているし、質問内容と合っていませんが?
>でもうまくいきませんでした。
具体的に、どううまく行かなかったのかを書きましょう。
文法エラーになるとか、期待した結果と違うといったことと、具体的な内容を書きましょう。
やりたいことを推測すると、以下のようなSQLでしょうかね?
insert into A
select id,txt from (select txt from A where id=1) as x,B
No.1
- 回答日時:
補足をお願いします。
tableA
-----------------
ID TEXT
1 a
2 b
3 c
tableB
-----------------
ID
1
2
3
tableB.ID をtableAのどこのフィールドに入れたいのですか?
tableA.ID とtableB.IDに関連付けたいのか?tableA.TEXT とtableB.IDに関連付けたいのか?どっちですか?
tableB.ID分だけtableA.IDに挿入したいということです。
その際に、tableA.TEXTに入れるのは、
tableA.IDが1のTEXTを入れるということをしたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Oracle SQL update方法 2 2022/06/22 14:07
- MySQL 次の時間帯の勝率の合計を求めるSQL文 1 2023/07/04 17:12
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- JavaScript html javascriptにてWeb SQLを操作したい。 2 2022/12/16 17:43
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
副問合せの書き方について
-
select文のwhere句に配列を入れ...
-
別テーブルからSELECTした値を...
-
sqlで、600行あるテーブルを100...
-
クエリ表示と、ADOで抽出したレ...
-
ある条件の最大値+1を初番する...
-
単純なクエリーなのにSELECTし...
-
VIEWの元のテーブルのindexって...
-
バインド変数について
-
MySQL 複数個の値を取るカラム...
-
エラー 1068 (42000): 複数の主...
-
エクセルからOutlookメールを起...
-
複数のExcelアドインひとつのタ...
-
LEFT JOIN と GROUP BY
-
Updateの複数テーブル条件時のL...
-
マイクラPC版のコマンドで効率...
-
VBAでボタンをクリックする方法...
-
上位3位を求めるSQL文は?
-
カラム名でseqとidではどちらが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
SQLサーバから、項目の属性(型...
-
副問合せの書き方について
-
VIEWの元のテーブルのindexって...
-
エクセルの関数について教えて...
-
SQLにて特定の文字を除いた検索...
-
マイクラPC版のコマンドで効率...
-
select文のwhere句に配列を入れ...
-
sqlで、600行あるテーブルを100...
-
ある条件の最大値+1を初番する...
-
inner joinをすると数がおかし...
-
Unionした最後にGROUP BYを追加...
-
期間の重複を調べるSQL文につい...
-
クエリ表示と、ADOで抽出したレ...
-
Access パラメータクエリをcsv...
-
PL/SQLの変数について
-
MySQLのDATE型カラム値がNULLの...
-
php+mysqlで複数選択削除について
-
上位3位を求めるSQL文は?
おすすめ情報