- 締切済み
マルチテーブル・インサート
ご教授よろしくお願い致します。 現在、table_aにInsertされたカラム(no,name)のデータを同時にtable_bにも反映するSQL文を考えております。 【table_a】 no | name | price ============== 005 apple 500 001 banana 250 【table_b】 no | name | color ================= 005 apple red 001 banana yellow Insertをそれぞれのテーブルで実行すれば、もちろん反映はできるのですが一度のInsert文でできるのならそれにこしたことはありません。 いろいろ調べた結果、下記のサイトでできるようなことが記載してあったため、実行したのですが、『ALL』がシンタックスエラーとなってしまいます。 そのため、postgresのマニュアルを確認してみたところ、Insert文にALL句の指定は特別記載されていなかったため、できないとも思っているのですが… サイト↓ http://www.atmarkit.co.jp/fdb/rensai/sqlclinic12/sqlclinic12_1.html サイトを参考にしたSQL文 『INSERT ALL INTO table_a(no,name) VALUES(005,apple) INTO table_b(no,name) VALUES(005,apple); 』 何か良い方法をご存知の方がいましたら、ご教授よろしくお願い致します。同じことをUpadteでもやらなければいけないのですが、それはもう少し自分で考えてみます。 只、できないことが明白な場合は、ご指摘を頂けると有難いです。 環境としましては、 OS 【Windows xp】 DB 【PostgreSQL 8.2】 です。
- code55
- お礼率77% (48/62)
- PostgreSQL
- 回答数3
- ありがとう数8
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- alte_6
- ベストアンサー率60% (9/15)
複数tableを同時に追記するなら transaction内でinsertを呼ぶしかないと思います。 table_AとBの関係性がよくわかりませんが 1つのテーブルにできるなら、table_A、BにあたるViewをつくればいいですが
- chukenkenkou
- ベストアンサー率43% (833/1926)
提示されたINSERTの構文は、Oracleのノウハウとして説明されたものです。 マルチテーブル・インサートは、Oracleの独自機能であり、他の主要なRDBMSでは実装されていません。 主要なRDBMSで特定の表にINSERT、UPDATE、DELETEした時、その背景で他表の更新をしたい場合は、トリガを使います。PostgreSQLでは、「トリガ」と、それと類似した機能で「ルール」があります。
お礼
返答が遅くなり、申し訳ありませんでした。 やはりマルチテーブル・インサートは、無いのですか... その他のやり方という事で、ご教授して頂いた『ルール』を試してみます。 有難うございました。
- jamshid6
- ベストアンサー率88% (591/669)
INSERT ALLはOracle以外には実装されていないと思います。 (SQL Serverにもありません) それぞれのDBMSがSQL標準に準拠しない多くの構文をサポートしています。
お礼
ご指摘ありがとうございました。 ということは、今回はそれぞれInsert文を発行しなくては いけないということですね。
関連するQ&A
- INSERT INTOに関しまして。
$sql = "INSERT INTO テーブル名(name,day,kg)VALUES('','$day','-1')"; 現在このようなSQL文でINSERTしていますが、データベース内にあるカラムname全てに対してINSERTするにはどうすれば良いでしょうか??現在のSQL文ではそれができず、nameが空欄の状態で更新されてしまいます。
- ベストアンサー
- PHP
- INSERTできません
以下のSQL文でテーブルに追加したいのですが、実行すると 実行中のメッセージがでたまま動かなくなってしまいます。 他のテーブルで同じようなINSERT文を実行すると追加できるので SQL文の間違いではないと思うのですが、原因がわかりません。 どなたか教えてください。 INSERT INTO table (CODE_A, CODE_B, SAISYUU_KOUSIN_DATE) values('9999', '999999', TO_DATE('2005/11/0716:15:14','YYYY/MM/DD HH24:MI:SS'));
- 締切済み
- Oracle
- IDENTITY列の複数テーブルへのINSERT
テーブルAへINSERTをした場合のIDENTITY列の値を 同じトランザクション内で テーブルBの別のフィールドへINSERTしたいのですが、 どのようにSQLを書けばよいのか、困っています。 どうか、ご教示お願い致します。 INSERT INTOTABLE_A (NAME_A) VALUES ('あいうえお') ↓ INSERT INTOTABLE_A (A_ID,NAME_B) VALUES (取得したA_ID, 'さしす') INSERT INTOTABLE_A (NAME_A) VALUES ('かきくけこ') ↓ INSERT INTOTABLE_A (A_ID,NAME_B) VALUES (取得したA_ID, 'たちつ') INSERT INTOTABLE_A (NAME_A) VALUES ('さしすせそ') ↓ INSERT INTOTABLE_A (A_ID,NAME_B) VALUES (取得したA_ID, 'なにぬ') TABLE_A ID NAME_A 5 'あいうえお' 6 'かきくけこ' 7 'さしすせそ' TABLE_B ID A_ID NAME_B 1 5 'さしす' 2 6 'たちつ' 3 7 'なにぬ'
- ベストアンサー
- SQL Server
- insert文等で「`」の有無で失敗するテーブルとしないテーブルがある。
XAMPP(winXP、PHP4)を使っています。 Aのテーブルでは $query= "insert into table (a,b,c,d) values('1','2','3','4')"; $result = mysql_query($query); でデータが追加されるのに、Bのテーブルでは失敗しました。 今日ずっと何が間違っているのかわからなかったのdですが、 $query= "insert into table (`a`,`b`,`c`,`d`) values('1','2','3','4')"; $result = mysql_query($query); とすると成功しました。 なぜAのテーブルでは「`」が無くても成功したのに、Bのテーブルでは必要なのでしょうか。 宜しくお願いします。
- ベストアンサー
- MySQL
- 既存データをINSERT文にして出力するツールは?
Oracleデータベース内のデータを取り出して、SQL(INSERT文)として出力できるツールは無いでしょうか。 例えば TABLE_A というテーブル内に次のようなレコードが入っているものとして、下記のようなINSERT文を生成してくれるフリーの(もしくは安価な)ツールは無いでしょうか。 MY_ID MY_NAME MY_DESC ----- ------- ------- 00001 hoge1 説明1 00002 hoge2 説明2 insert into TABLE_A (MY_ID, MY_NAME, MY_DESC) values ('00001', 'hoge1', '説明1'); insert into TABLE_A (MY_ID, MY_NAME, MY_DESC) values ('00002', 'hoge2', '説明2'); CSV形式で出力するようなツールは見つけたのですが、INSERT文にしてくれるツールがなかなか見つかりませんでした。 「PL/SQL Developer」というものを見つけたので試してみたところ、これはまさにうってつけのツールだったのですが、それなりのお値段(25,000円ほど?)でした。 このような本格的なツールでなくて良いので、フリーソフト(もしくは安価な)で無いでしょうか。 ちなみに Oracle のバージョンは Oracle 10g です。
- ベストアンサー
- Oracle
- A5:SQL Mk-2でテーブルは作れないのか?
xamppとA5:SQL Mk-2ソフトを組み合わせてます。 phpmyadminでデータベースとテーブルを作ってMk-2でsql文 例としてselecto * from aaa;などは動きます。 しかしMk-2で CREATE TABLE shiire(scode CHAR(4),kosuu INT,sdate CHAR(7)); INSERT INTO shiire VALUES ('A002',35,'2003-04'); INSERT INTO shiire VALUES ('B002',24,'2003-05'); は作れません。phpmyadminのクエリでは作れます。 ご教授ください。
- ベストアンサー
- MySQL
- SQLでできますか?
SQLでできますか? INSERT INTO test (A) VALUES (B)というSQLを発行したいのですが、このSQLのVALUESのBにあたる部分を正規表現的に指定して、一度のクエリで以下のような結果を得たいのです。 1.テーブルhogeのpiyoカラムの値の先頭がappleになっている行を探す。 2.(1.)で抽出した行のidの値をBとする。 例えば、以下のようにです。 ■皆様が回答してくださるSQL文(1クエリで行いたい) ???????????? ■皆様が回答してくださるSQL文と同等の意味を持つSQL群 INSERT INTO test (A) VALUES (100) INSERT INTO test (A) VALUES (101) INSERT INTO test (A) VALUES (102) ■テーブルhoge _____id_____piyo__________created 1. 100 applebanana 2009/01/02 2. 101 apple_12345 2009/01/03 3. 102 appleXXXXXX 2009/01/04 4. 103 bananananan 2009/01/05 5. 104 ringogogogo 2009/01/06 分かりにくい説明ですが、お詳しい方、どうかご回答の程を宜しくお願いいたします。
- ベストアンサー
- MySQL
- データベースに変数の値を挿入
HTMLのフォームから、getParameterで取得した値(id,name,club)をデータベースに挿入したいのですが、 String sql="insert into test_table values(id,name,club)"; と記述してもその文字列がそのままテーブルに反映されてしまいます。 もちろん、 String sql="insert into test_table values('12','●田○郎','野球部')"; とあらかじめ記述しておけばこのデータがテーブルに挿入されるのですが・・・。 PHPでは確かvalues('{$id}','{$name}','{$club}')のように記述すればできたので戸惑っています。 JAVAでSQL文に変数を含める場合、どのように記述すればいいのでしょうか?
- ベストアンサー
- Java
- [ADO.NET]Accessの日付型にデータをInsertするには?
言語はVB.NETでDBはAccess2003、OleDbで接続をしています。 テーブルに日付型のフィールドがあるのですが、 SQL文でInsertしようとすると、 System.Data.OleDb.OleDbException: 更新可能なクエリであることが必要です。 という例外がスローされます。 SQL文としては、 INSERT INTO TEST_TABLE (name,updatetime) VALUES ('テスト',DateValue('2006/12/11 18:00:00')); というような構文になっています。 初歩的な不明点ですが、ご教授お願いします。
- ベストアンサー
- Visual Basic
- 入力値と外部キーをINSERTするには
追加したいカラムが3つあるとしまして、そのうち2つはフォームからの入力値で、残り1つは別テーブルのIDをWHEREで引っ張ってきてINSERTしたい場合、INSERT...VALUES()とINSERT...SELECT構文を組み合わせないとダメかと思うのですが、組み合わせるとうまくいきません。2つの文に分けるしかないのでしょうか? やりたいことは下の感じのSQLです。が、解釈してくれません。 INSERT INTO room(A, B, C) VALUES (1, 2, SELECT other_table.id FROM other_table WHERE other_table.id = 1");
- ベストアンサー
- MySQL
お礼
ご指摘有難うございました。 いろいろ方法があるのですね。 参考にさせて頂きます。