[pgsql-jp: 32290] 他のテーブルのデータにて主テーブルデータを更新

YOKOTA currency @ lily.freemail.ne.jp
2004年 2月 19日 (木) 13:27:01 JST


YOKOTAです。

主題:他のテーブルのデータにて主テーブルデータを更新

過去ログを検索しましたが探しきれませんでした。

以下の処理をさせたいときのSQL文は以下で合ってますでしょうか。
アドバイスお願いします。

【処理内容】
例として以下の2つのテーブルがあったとします。

Aテーブル構造:()内はカラム名、テーブル名はtable_a
(id)       (name)           (address)      (comment)
管理番号 | お客様名     |      住所      | コメント
------------------------------------------------------
M0001    | お客様A      |  東京都港区    |  日中は不在
M0002    | お客様B      |  東京都品川区  |  夜間配達希望
M0003    | お客様C      |  東京都板橋区  |  午前中在宅
M0004    | お客様D      |  横浜市港北区  |  日中は不在
M0005    | お客様E      |  東京都渋谷区  |  
M0006    | お客様F      |  東京都千代田区|  担当者不在
.
.
.

Bテーブル構造:()内はカラム名、テーブル名はtable_b
(id1)       (name1)          (address1)        (comment1)
管理番号 | お客様名      |      住所       | コメント
-------------------------------------------------
M0004    | お客様D       |  川崎市多摩区   | 住所変更
M0006    | お客様F       |  東京都立川市   | 住所変更
M0015    | お客様XX      |  東京都新宿区   | 住所変更
.
.
.
table_a タプル数>table_b のタプル数
両テーブルとも重複する管理番号は無いとします。

主テーブル(以下Aテーブル)にある、指定した列(住所とコメント)のデータを、
他のテーブル(以下Bテーブル)にあるデータ(住所とコメント)で更新する。
ただしその時に、A,B両テーブルに存在する列(管理番号,id)のデータを照合しな
がら行い、
照合の結果一致したタプルのみ更新を行う。
(上記例で言うと管理番号M0001からM0003のデータは更新しない)

【SQL文】
update table_a 
set address = (select address1 from table_b )
where id = (select id1 from table_b);

update table_a 
set comment = (select comment1 from table_b )
where id = (select id1 from table_b);

どこか間違った箇所があればご指摘お願いします。



-- 
YOKOTA <currency @ lily.freemail.ne.jp>





pgsql-jp メーリングリストの案内