• ベストアンサー

あるテーブルの内容を基準にして違うテーブルを更新するSQL文

教えて下さい。 あるテーブルに下記の内容があります。 ID│名称 ─┼─── 1│花 2│木 3│水 もうひとつのテーブルには、 ID│名称 ─┼─── 1│海 3│水 4│空 となっています。 最初のテーブルの全レコードを対象に、最初のテーブルのIDと同じ値がもうひとつの テーブルにある場合、もうひとつのテーブルをUPDATEし、存在しなければINSERTしたい です。 結果を ID│名称 ─┼─── 1|花 2│木 3│水 4│空 を期待しています。 このようにするSQL文を教えていただけませんでしょうか。 よろしくお願いします。

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

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

良く似た質問が過去に有りました。 回答2がぴったりだと思います。 参考にしてください。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=604829
asaichi
質問者

お礼

うっかりしていました。 ご指摘ありがとうございます。 大ヒットです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.1

こんにちわ。 お使いになられているRDBMS によって、書き方は 変わってきますが、Oracle (9i) であれば MERGE 文が使えたと思いますょ。

asaichi
質問者

お礼

DBが記載していませんでした。 すみません。 DBは、PostgreSQLです。 ORACLE9iの時は参考にさせて頂きます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 一つのSQL文で取得したい

    こんにちは。 テーブルAに以下のようなデータがあるとします。 ID |名称 |項目 -------------- 01 |ああ | 02 |いい | 03 |うう |01,02 04 |ええ |01 SELECT文で取得したいのは、フィールド「項目」の値を、他のレコードの名称で置き換えた列です。 つまり、 ID |名称 |項目 |項目名称 ------------------ 01 |ああ | | 02 |いい | | 03 |うう |01,02 |ああ,いい 03 |ええ |01 |ああ という結果が欲しいということです。 「項目」の値はカンマで区切られています。 これを一つのSQLで取得したいと思っています(テーブルの結合、サブクエリーはOK)が、方法がわかりません。 どなたかどうぞご教授ください。 よろしくお願い致します。

  • INSERT文とUPDATE文の使い分け

    いつもお世話になっております。 MYSQLで x_table ID SUBID  1  aaa 2 aaa 3 bbb 4 ccc というテーブルがあったとして、「IDが 1 かつ、SUB_IDが aaa」の項目が存在する場合はUPDATE、存在しない場合はINSERT、という形でSQLを使い分けたいと考えています。 現在は SELECT * FROM x_table WHERE ID=1 AND SUBID='aaa' というSQLでレコードの存在確認をし、その結果によりif文でUPDATE文とINSERT文を使い分けているのですが、レコードの存在確認とINSERTやUPDATEのSQLを一つにまとめる事が出来るようなやり方って無いでしょうか? 無さそうな場合は「無い」とだけでも答えていただけるとうれしいです。

    • ベストアンサー
    • PHP
  • テーブルの一部の内容をまとめて、別テーブル上に更新したい

    テーブル(tA)のカラム(cA cB)を入れ替えたいと思っています。 (全カラムではなく、一部分だけの入れ替えです。) そこで、一時テーブルを作成し、  元テーブル→一時テーブル(入れ替え部分だけ)→元テーブル で対象となるカラムを入れ替えようと思いました。 一時テーブルに、カラムを入れ込むまでは出来たのですが、一時テーブルから、元のテーブルに入れ込むSQLがどうしてもわからず、教えていただきたく書き込みました。 行ったSQLとしては、 1)INSERT INTO TEMP(Id,Date,cA,cB) SELECT Id,Date,cA,cB FROM tA WHERE Id=XXXX; 2)UPDATE tA SET cA=(SELECT cA FROM TEMP WHERE Id=XXXX AND tA.Date = TEMP.Date ) WHERE Id=XXXX; といった形で試してみました。 ご教授、宜しくお願いします。

    • ベストアンサー
    • MySQL
  • ORACLEでのSQL、シンプルな方法は?

    ORACLEでのSQL文について質問です。 SQLで条件に合うレコードがあるかどうかはどう判別するのでしょうか? 画面で2つの条件を選んで テーブル ・ステータス ・フラグ 条件に合うレコードがなければINSERT 条件に合うレコードがあればUPDATE レコードが元々あるが、画面で指定された条件から外れる場合はDELETE としたいのですが、うまくSQLが書けません。 レコードがあればupdate、なければinsertするというのは多いのですが。 何かシンプルな方法はないでしょうか。

  • 集計のSQL文について

    SQLでの集計方法について質問です。 Oracle8iを使用しています。 あるテーブルに以下のようなレコードがあります。 ID 回数 値 1   1  100 1   2  200 1   3  300 2   1  150 2   2  550 .... この登録されている値をそのIDごとに、その回数まで回数ごとにサマリーした結果を出力したいのですが どうすればよいでしょうか。 ID 回数 値 1   1  100  ・・・(100) 1   2  300  ・・・(100+200) 1   3  600  ・・・(100+200+300) 2   1  150  ・・・(150) 2   2  700  ・・・(150+550) 宜しくお願いします

  • AccessのSQLについて教えてください。

    Excel+VBA から、ADOを使って、Accessを操作しようとしています。 なんとか、sqlを実行できるようになったのですが、 一点、分からないところが出てきましたので、教えてください。 insert文で、レコードを追加したとき、追加されたレコードのIDを取得したいのですが、 どのようにすれば良いかわかりません。 コードは次のようにしています。 cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & データベース名 & ";" sql = "INSERT INTO テーブル名(フィールド) VALUES(値)" cnn.Execute sql 以上、すみませんが、よろしくお願いいたします。

  • SQLでの更新クエリに関する質問

    テーブルAの社員数の値をテーブルBの対応したIDの社員数の値で更新したいのですが、どのようなSQL文を書けばいいのでしょうか? テーブルA ID 会社名 資本金 社員数 1 ○×株式会社 1000万 70 2 △△株式会社 1億2000万 320 3 □□□株式会社 3000万 170 4 ○○△商事 1500万 34 テーブルB ID 社員数 2 337 3 175 例としてあげたので少ないレコード数ですが、実際はテーブルAのレコード数は数万件とあり、それに対するテーブルBのレコード数も数千件とあります。

  • 3つのテーブルを結合させたSQL文について

    3つのテーブルを結合させたSQL文について作成方法を教えてください。 よろしくお願いいたします。 【テーブル構成】 テーブル名---項目名/項目名・・・です。 tblA---id/del_flg/name tblB---id/del_flg/add tblC---id/del_flg/family 各テーブルはidによりリンクされます。 tblAのdel_flgは在籍者=0 退職者=1で、一人1レコードです。 tblBでは住所管理をしています。 旧情報を残したいので、更新時には新たにdel_flg=0でレコードを作成し、既存レコードはdel_flg=1に更新します。 tblCは、既婚者のみ作成されるレコードです。 つまり、tblBとtblCは、レコードが存在しない、あるいはdel_flg=0のみ、del_flg=0とdel_flg=1が混在 のどれかのパターンになります。 【やりたいこと】 いま、これらすべてのテーブルを全部つなげて、在籍している人の情報だけ集めたいのです。 tblAからはdel_flg=0のレコードをすべて取得したうえで、tblBとtblCにdel_flg=0のレコードがあればその情報も取得したい。 【経過】 select * from (tblA inner join tblB on tblA.id = tblB.id ) inner join tblC on tblA.id = tblC.id とりあえずwhere条件をつけなくても、tblCに存在している人しか取得ができないのです。 where条件も含めて、上記条件のもと、希望するようなSQLの組み立て方をご教授ねがいたいのでよろしくお願いいたします。 できれば、早目の回答が希望です。

    • ベストアンサー
    • MySQL
  • VBでSQL

    SQLでテーブル1に該当レコードがなければインサート あればアップデートをする処理をしたいのです IF ??? THEN UPDATE テーブル1 SET SELECT * FROM テーブル2 WHERE 条件 ELSE INSERT INTO テーブル1(SELECT * FROM テーブル2) END IF ???はプライマリキーで判定をしようと考えています こんな感じでやろうとしたところ うまくいきませんでした VB上で実行しよううとしているからなのでしょうか? ADOでSQLサーバに接続しています 条件分岐もどういう条件(VBでの書き方)がわからないです。 よろしくお願いします。

  • SQL文にて・・・

    質問があります。PostgreSQLです。 テーブル(test_tbl)があるとします。 テーブル構成は --------------------------- id ===== char(16) [英数文字格納] point ==== int2 add_date ==== timestamp --------------------------- このテーブルから idが2文字目から'di6ek68dh5ls7g'のレコードを取得したいと考えています。 レコード数がかなりおおいので パフォーマンスを重視したいのですが、 検索SQLがわかりません。 select * from test_tbl where id like '%di6ek68dh5ls7g'だとでると おもうのですが、 これ以上にパフォーマンスがあがる SQLがわかる方お願いいたします。