• ベストアンサー

レコードの更新と追加

kenken_paの回答

回答No.1

私は普段ORACLEを使用していますが、さすがに手元にはありませんので 確実な回答ではないことを御了承ください。 1.については以下のようなSQLになります。ポイントはテーブルの別名です。 UPDATE テーブル1 A ,テーブル1 B SET A.YEN1=B.YEN1,A.YEN2=B.YEN2 … WHERE A.YAER=200603 AND (B.YAER=200503 AND A.SITEN=B.SITEN) 2.は比較的簡単ですがやはり別名を使っていわゆるSELECT INSERT を行います。 INSERT INTO テーブル1 (YEAR,SITEN,YEN1,YEN2 …) SELECT 200604,A.SITEN,A.YEN1,A.YEN2 … FROM テーブル1 AS A WHERE A.YEAR=200504 一応手元のAccess2000で試しましたが、ORACLEでもあまり変わりません。 考え方は一緒ですので多少構文を変えれば動きます。

関連するQ&A

  • SQL UPDATE 文 GroupByの値を更新したい

    SQLの UPDATE文について質問させていただきます。 テーブル内のデータを日付と時間で GroupBy して カウント求めています。 求めた値(カウント)を、日付をキーにして同じテーブル内のフィールドに更新するSQLを作成したいと考えています。 GroupByして、カウントを求めることはできるのですが、 どうしても、UPDATE文を実行させることができません。 この処理は、SQLで行うことはできるのでしょうか? 下記に、UPDATE前と後のテーブルデータを記載しています。 日付   時刻 20090101 0:00  20090101 0:00 20090102 0:00 20090102 0:00 20090102 1:00 20090103 2:00 ↓ 日付   時刻 カウント 20090101 0:00 2 20090101 0:00 2 20090102 0:00 2 20090102 0:00 2 20090102 1:00 1 20090103 2:00 1 よろしくお願いいたします。

  • テーブル結合のSQL文について

    はじめまして、よろしくお願いします。 テーブルA、B、Cから情報を取得し、下記のSELECTイメージを表示させたいのですが、 どのようなSQLを記述すれば良いのかわからず、困っております。 どなたかご教示頂けますでしょうか。 SELECTイメージ  日付      キー  ------------ -------------  9/1      AAAAA  9/1      CCCCC  9/2      AAAAA  9/2      CCCCC  9/3      AAAAA  9/3      BBBBB  9/3      CCCCC  9/4      AAAAA  9/4      BBBBB  9/4      CCCCC テーブルA  日付      キー  ------------- -------------  8/31      AAAAA  8/31      CCCCC テーブルB  日付      キー  ------------ -------------  9/1      AAAAA  9/3      BBBBB  9/4      CCCCC テーブルC  日付  -------------   ・   ・   ・   8/31   9/1   9/2   9/3   9/4   9/5   9/6   ・   ・   ・

  • レコードが追加できない

    SQL-Server2010を使用しています。 レコードを追加する際にキー項目が存在する場合は追加しないようなSQL文を作成しました。 追加するテーブルにレコードが1件以上あれば思ったとおりの処理となりますが、 1件も存在しない場合は追加できません。 下記がそのSQL文です。 原因と対策方法を教えて頂けませんでしょうか? INSERT INTO foo(商品コード, 商品名) SELECT DISTINCT 'ABC123' , 'りんご' FROM foo WHERE NOT EXISTS( SELECT * FROM foo WHERE 商品コード = 'ABC123' ) 以上です。 宜しくお願い致します。

  • SQL*Loaderで既存のレコードの更新

    SQL*Loaderで既存のレコードがあったらUpdate処理を行いたいのですが 「Oracle7 Server ユーティリティ」に SQL*Loaderは、既存レコードがNULL列であったとしてもレコードを更新しません。 既存の行を更新するには、次の手順を利用してください。 1.データを一時表にロードする 2.相関副問合わせを持つSQL言語のUPDATE文を使用する 3.一時表を削除する とありますが、上記の1~3が具体的にどうすれば良いのか分りません・・・ 1.データとは、テーブルのデータ?それともロードファイルのデータ??   3.に削除とあるので、作成するのでしょうか?? 2・これはctlファイルに記述するでいいのでしょうか?? 記述の仕方は?? 3.ドロップコマンドはctlに記述でよろしいのでしょうか?? などなど・・ すみません、ご教授お願いできませんか??

  • 3つ以上の外部結合から抽出するSQL構文

    次の3つのTABLEから期待する結果(結果を参照)を導きたいのですがJOIN等を使用しても期待と異なります。SQLを教えて下さい。結果は、SELECTでもVIEWでも構いません。一つのSQLでなくても構いません。 ●テーブル構成 テーブル名 - TB_A- -----TB_B--- ----TB_C----         ------ ------------- ------------- 列名     EMPNO EMPNO DATA1 EMPNO DATA2 レコード1   000001 000002 AAAAA 000001 AAAAA レコード2   000002 000002 BBBBB 000002 BBBBB レコード3   000003 000002 CCCCC 000003 CCCCC ●結果 列名     EMPNO DATA1 DATA2 レコード1   000001 ???????? AAAAA レコード2   000002 AAAAA BBBBB レコード3 000002 BBBBB ???????? レコード4   000002 CCCCC ???????? レコード5   000003 ???????? CCCCC

  • レコード追加に要する時間について。

    insert文でレコードを追加する際、すでにテーブルに登録されているレコードが多ければ多いほど、insert文でレコードを追加する時間は長くなるのですか?できればその理由もご存知な方ご教授おねがいします。 OSとDBのバージョンは以下です。 OS:Solaris8 DB:Oracle8

  • 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 このあと、どのように書けばよいのかがわかりません。

  • PHPでDBからデータを抽出してHTMLで表示する

    クライアント上で表示されているHTMLのテキストボックスに入力された文字列をホストに送信し、送信した文字列をSQLの抽出条件に設定してDB(MySQL)に登録しているデータ一覧をPHPで取得後、取得したデータ一覧をクライアントのHTMLのTABLEに一覧で表示したいのですが、どのようにPHPとHTMLをプログラムすればよいでしょうか? イメージ MysSQL テーブル カラム1|カラム2|カラム3| AAAAA|BBBBB|CCCCC| BBBBB|BBBBB|CCCCC| DDDDD|BBBBB|CCCCC| HTML テキストボックス カラム1「AAAA」 検索実行↓ HTML テーブル カラム1|カラム2|カラム3| AAAAA|BBBBB|CCCCC| AAAAA|BBBBB|CCCCC| 素人染みた質問で申し訳ございませんが、ご存知の方がいらっしゃいましたら終えてください。 以上

    • ベストアンサー
    • HTML
  • INSERT文のSELECT部分の更新

    insert into selectについて教えてください。 あるテーブルからselectした値と、連続する値を 同時にinsertするする事はできますでしょうか? 使用DBはOracle9iです。 例えば、以下のようなテーブルがあった時に テーブルA カラム1 カラム2 カラム3 カラム4 この時に、カラム1,カラム2,カラム3を別のテーブルからselectし、 カラム4には「100001」から順に値を1ずつ増やしてながら セットしたい場合、1つのSQLで実行する事は可能でしょうか? ヒントなどいただけたらと思います。よろしくお願いします。

  • SQLServer Access(adp)から更新

    SQLServer初心者です。 Access(adp)から、ストアドプロシージャを使ってSQLServer(2005)の テーブルを更新させる処理があります。(約9万行のCSVデータを読み込み) 内容としては1行ずつLoopさせて以下の処理を行っている感じです。 1、AテーブルにCSVファイルから取得したデータをINSERT 2、Aテーブルの同一キーがマッチしたBテーブルの2項目に対して、   CSVファイルの値を更新(Update)  テスト環境では問題なく更新できていましたが、本番環境だと処理が異様に遅くなりました。 (1時間かかって12000件ほどしか更新されません) テーブル、インデックス、ストアドの中身も確認しましたが違いが見つけられず。 「SET ARITHABORT ON」の設定も入れてみましたがダメでした。 2のUpdate処理を外すと運用に耐えるくらいの速度になったので、Update部分が 問題なのだとは思うのですが・・。 UPDATE Bテーブル SET koumoku1=@csvkoumoku1,koumoku2=@csvkoumoku2 WHERE KEY=@csvkey ←csvkeyはAテーブルのキーになります サーバ環境と本番環境はコピーしているためまったく同じだとは思うのですが どこかほかに確認するところなどありますでしょうか。 よろしくお願いいたします。