プロが教えるわが家の防犯対策術!

ご教授よろしくお願い致します。

現在、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 …

サイトを参考にした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】
です。

A 回答 (3件)

INSERT ALLはOracle以外には実装されていないと思います。


(SQL Serverにもありません)
それぞれのDBMSがSQL標準に準拠しない多くの構文をサポートしています。
    • good
    • 1
この回答へのお礼

ご指摘ありがとうございました。

ということは、今回はそれぞれInsert文を発行しなくては
いけないということですね。

お礼日時:2008/08/23 14:42

提示されたINSERTの構文は、Oracleのノウハウとして説明されたものです。


マルチテーブル・インサートは、Oracleの独自機能であり、他の主要なRDBMSでは実装されていません。

主要なRDBMSで特定の表にINSERT、UPDATE、DELETEした時、その背景で他表の更新をしたい場合は、トリガを使います。PostgreSQLでは、「トリガ」と、それと類似した機能で「ルール」があります。
    • good
    • 0
この回答へのお礼

返答が遅くなり、申し訳ありませんでした。

やはりマルチテーブル・インサートは、無いのですか...
その他のやり方という事で、ご教授して頂いた『ルール』を試してみます。

有難うございました。

お礼日時:2008/08/26 13:08

複数tableを同時に追記するなら


transaction内でinsertを呼ぶしかないと思います。

table_AとBの関係性がよくわかりませんが
1つのテーブルにできるなら、table_A、BにあたるViewをつくればいいですが
    • good
    • 0
この回答へのお礼

ご指摘有難うございました。

いろいろ方法があるのですね。
参考にさせて頂きます。

お礼日時:2008/08/26 13:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!