insert、selectのやり方を教えて下さい

このQ&Aのポイント
  • テーブル1とテーブル2から、特定の条件を満たすデータを抽出して、新たなテーブルに出力する方法を教えてください。
  • テーブル1とテーブル2の結合と条件を指定することで、テーブル3に要求された結果を出力することができます。
  • 具体的なinsertとselectのコード例は省略しますが、テーブル1とテーブル2を結合するためのjoin句を使用し、適切な条件を指定することで、テーブル3に要求されたデータを挿入することができます。
回答を見る
  • ベストアンサー

insert、selectのやり方を教えて下さい

こんにちは。 すみません、ネットで調べていたのですが、見当もつかなかったので、教えていただけないでしょうか? ---------------------------------------------- テーブル1:t1 c1 char(254)not null unique,c2 int,c3 int あ,3,null い,4,null う,2,null ---------------------------------------------- テーブル2:t2 c1 char(254)not null unique,c2 int,c3 int い,null,9 う,null,12 え,null,13 お,null,11 ---------------------------------------------- 上記の2つのテーブルがあるとします。そのときに、下記のような結果を新たなテーブルに出力するには、どのような、insert、selectが良いのでしょうか? ---------------------------------------------- テーブル3:result c1 char(254)not null unique,c2 int,c3 int あ,3,null い,4,9 う,2,12 え,null,13 お,null,11 ---------------------------------------------- 困っています。お願いします。

noname#38071
noname#38071

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

DB2の環境がなく、実機確認できていないのですが、次のSQLを試してみてください。 insert into result select coalesce(t1.c1,t2.c1), coalesce(t1.c2,t2.c2), coalesce(t1.c3,t2.c3) from t1 full outer join t2 on t1.c1=t2.c1

noname#38071
質問者

お礼

chukenkenkouさん、 お返事が遅れまして申し訳ございません。ご回答のとおりにやってみましたらできました。とても嬉しかったです。 ありがとうございました。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

それは完全外部結合といってSQLの種類やバージョンによってできるものと できないがあります。 具体的にどのプログラムのどのバージョンでやるかかいたほうがよいと思います。

noname#38071
質問者

補足

yambejpさん、 ありがとうございます。プログラムはDB2 V8 Windows版です。 よろしくお願いいたします。

関連するQ&A

  • 複数テーブルで ID の一意性を保つ

    Debian GNU/Linux 3.1 で psql 8.1.2 を使用しています。 下記の要領でテーブルを作成し、2つのテーブルでIDが重ならないようにしようと意図しました。 CREATE TABLE t1 ( t1_id int2 UNIQUE NOT NULL, t1_name text NOT NULL ); NOTICE: CREATE TABLE / UNIQUE will create implicit index "t1_t1_id_key" for table "t1" CREATE TABLE CREATE TABLE t2 ( t2_id int2 UNIQUE NOT NULL, t2_name text NOT NULL ); NOTICE: CREATE TABLE / UNIQUE will create implicit index "t2_t2_id_key" for table "t2" CREATE TABLE CREATE FUNCTION unique_t12_id(int2) RETURNS BOOLEAN AS 'SELECT NOT ( EXISTS(SELECT * FROM t1 WHERE t1_id = $1) AND EXISTS(SELECT * FROM t2 WHERE t2_id = $1) );' LANGUAGE SQL; CREATE FUNCTION ALTER TABLE t1 ADD CONSTRAINT con_unique_t12 CHECK (unique_t12_id(t1_id)); ALTER TABLE ALTER TABLE t2 ADD CONSTRAINT con_unique_t12 CHECK (unique_t12_id(t2_id)); ALTER TABLE ところが実際は上手くいきませんでした。 INSERT INTO t1 VALUES(1, 'test1'); INSERT 0 1 INSERT INTO t2 VALUES(2, 'test2'); INSERT 0 1 INSERT INTO t2 VALUES(2, 'test3'); ERROR: duplicate key violates unique constraint "t2_t2_id_key" # ここまでは期待通りの挙動です INSERT INTO t2 VALUES(1, 'test4'); INSERT 0 1 ここで制約が働いて欲しかったのですが、素通りでINSERTされています。 下記のように、操作後の関数の戻り値は「偽」なのでこの操作は制約に引っかかると思うのですが 何故意図したように動かないのでしょうか。 SELECT *,unique_t12_id(t2_id) FROM t2; t2_id | t2_name | unique_t12_id -------+---------+--------------- 2 | test2 | t 1 | test4 | f (2 rows) スペースが詰まって読みづらい箇所もありますが、よろしくお願いします。

  • SELECT実行中にINSERTしたい

    テーブルTに対し、データ抽出に数分かかるようなSELECT文を実行しているとして、 そのSELECT文の実行中にInsertしたらどのような挙動になるでしょうか。 (INSERTした瞬間にエラーが発生する?) また、SELECT文の実行中にInsertしたら、 「SELECT文が実行終了するまで待って、そのあとにINSERTする」 という動きにしたい場合、どのように設定(or SQLを書けば?)すればよいでしょうか。

    • ベストアンサー
    • MySQL
  • select insertで複数テーブルから値を取得したい

    環境:oracle9i select insertで、2つのテーブルから値を取得して、1つのテーブルにinsertすることは可能でしょうか? たとえば、以下の場合、どのようなSQL文を書けばよいか、アドバイスいただけますでしょうか。 よろしくお願いします。 insertしたいテーブル:A Aテーブルの項目:o,p,q,r,s,t 値を取得するテーブル:B,C Bテーブルの項目:o,p,q,r Cテーブルの項目:o,p,s,t oとpが主キーになっていて、それらが一致するBとCのデータを あわせて、Aにinsertしたいと思っています。 insert into A(o,p,q,r,s,t) select このあと、どのように書けばよいのかがわかりません。

  • 見たことのないINSERT文

    お世話になります。 他人の書いたSQLを解析して以下のようなコードを見つけました。 CREATE TABLE OYA ( ID NUMBER NOT NULL, NAME VARCHAR2(10) ) / CREATE TABLE KO ( ID NUMBER NOT NULL, OYA_ID NUMBER NOT NULL, NAME VARCHAR2(10) ) / INSERT INTO ( SELECT ID ,OYA_ID ,NAME FROM KO WHERE EXISTS ( SELECT ID FROM OYA WHERE NAME LIKE '%1' ) ) VALUES ( 1 ,1 ,'KODOMO-1' ); INSERT文でテーブル名を指定するかわりにSELECT文を指定しています。 SELECT INSERT文は知っていますが、このような表記は初めてです。 (文法エラーにならないのに驚きました) おそらく意図するところは、ある条件に一致したOYAが存在する場合に、KOをインサートするのだと思いました。 実際は、OYAがなくてもINSERTは実行されてしまいますが。。。 このような表記のINSERT文の説明が書いてあるサイトをご存知の方がいらっしゃいましたら、よろしくお願いします。

  • md5で暗号化して別フィールドにinsertしたい

    このようなMySQLのtable1があります。 id , name , comment   , ango 1 aoki こんにちは   null 2 inoue おはよう null 3 ueno こんばんは null 4 ono こんにちは null idはprimaryでauto_incrementです。 commentデータをmd5で暗号化して、angoのフィールドに入力したいのですが、うまくいきません。 select comment, md5(comment) from table1 を実行したところ、全てのcommentデータが暗号化されたのですが、それをangoフィールドにinsertしようとするとエラーが発生します。 insert into table1 (ango) select comment, md5(comment) from table1 #1066 - Not unique table/alias: 'table1' 検索してみたら同じ状況の方がいました。私もMySQLは3.23.58を利用しているのでそれが原因のようです。 http://www.mysql.gr.jp/mysqlml/mysql/msg/10401 MySQLのバージョンを上げることなく、どのような手順でやれば可能でしょうか?

    • ベストアンサー
    • MySQL
  • SQLのインサートでヌルを挿入できないというエラー

    SQLサーバーで、INSERT INTO・・・selectで抽出した列の値を入れたいのですが、主キーのところで下記のエラーが出ます。 テーブル ・・・の列 '・・・' に値 NULL を挿入できません。この列では NULL 値が許可されていません。INSERT は失敗します。 ステートメントは終了されました。 selectで抽出するテーブルの該当列を確認しても値はあるはずですが・・。 原因は何が考えられますか? お願いします・・・。

  • CakePHPとMySqlを使用しています。INSERTしたあと、id

    CakePHPとMySqlを使用しています。INSERTしたあと、idを取得する方法について教えて頂きたいです。 データをINSERTとSELECTをする関数を作成し、 メインの関数でINSERTとSELECTをする関数を呼び出すと、idがNULLとなってしまいます。 しかし、1つの関数でINSERTとSELECTを行うとidを取得する事ができました。 この方法は問題ないのでしょうか? この方法だとなぜidが取得できるんでしょうか? また、これ以外の方法でidを取得できる方法があればお教え頂きたいです。 宜しくお願いします。 【hogeテーブル】 id(PRIMARY。オートインクリメントさせています) name ●idがNULLになる方法 function main() { $this->insertHoge(); $id = $this->getHoge(); ←結果がNULLになる } function insertHoge() { $sql = "INSERT INTO hoge ('name') VALUES('ABC')"; $result = $this->query($sql); return $result; } function getHoge() { $sql = "SELECT id FROM hoge WHERE name='ABC'"; $result = $this->query($sql); return $result; } ●idが取得できる方法 function main() { $id = $this->insertHoge(); ←idがかえってくる } function insertHoge() { $sql = "INSERT INTO hoge ('name') VALUES('ABC')"; $result = $this->query($_sql); $sql = "SELECT id FROM hoge WHERE name='ABC'"; $result = $this->query($_sql); return $result; }

    • 締切済み
    • PHP
  • INSERT,UPDATEしなかったレコードだけをDELETEしたい

    質問させてください、 CSV形式の10万行のデータをADO経由でINSERT,UPDATEしています そのときUPDATEもINSERTもされなかったレコードをDELETEしているんですが、 今はINSERT,UPDATE処理が終わったあと、全レコードのrecordsetを1レコードずつ csvファイルの1行と比較しています。 他に良い方法はないでしょうか? csvファイルには category, item, price postgresのテーブル名はt_zaikoとして id(INT[NOT_NULL, default_nextval, primary_key]), category(SMALL_INT), item(TEXT), price(SMALL_INT) とします。

  • BULK INSERTについて

    CSVをバルクインサートでitemテーブルにBULK INSERTする際に、 下記のようなSQL文を使っているのですが、CSV内のブランク文字は 実行後にNULLになってしまいます。 やりたいことはNULLではなく空白文字("")にしたいのですが、 下記のSQL文をどのように変えればよいのでしょうか。 または、CSVを変更する方法でもよいです。 BULK INSERT item FROM 'c:\test.txt' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ); 大変お手数ですが、 わかる方がいらっしゃいましたらよろしくお願いいたします。

  • SQLのSELECT文について

    以下の注文テーブルで、注文件数と送料と注文合計金額を一度に取得する場合、以下のようなSQL文で合っていますか? "SELECT order.total, order.delivery_fee, SUM(order.total * order.tax) AS total_for_paying FROM order"; CREATE TABLE `order` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `status` tinyint(3) UNSIGNED NOT NULL DEFAULT '0', `order_payment_status` tinyint(3) UNSIGNED NOT NULL DEFAULT '0', `buyer_id` bigint(20) UNSIGNED NOT NULL, `discount` INT(11) UNSIGNED NOT NULL, `delivery_fee` INT(11) UNSIGNED NOT NULL, `charge` INT(11) UNSIGNED NOT NULL, `total` INT(11) UNSIGNED NOT NULL, `tax` INT(11) UNSIGNED NOT NULL, `total_with_tax` INT(11) UNSIGNED NOT NULL, `total_for_paying` INT(11) UNSIGNED NOT NULL, `use_point` INT(11) UNSIGNED NOT NULL, `created` DATETIME NOT NULL, `updated` DATETIME NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

    • ベストアンサー
    • MySQL