UPDATE文の妙技
先日、ORACLEのあるテーブルの更新をすることになって、何とかPL/SQLで組まずに
SQL一発で更新できないものか考えていました。
どんな内容かと言うと、
テーブル1
A | B |
111 | あああ |
222 | いいい |
333 | ううう |
テーブル2
A | B |
111 | かかか |
222 | ききき |
444 | くくく |
という2つのテーブルがあって(どちらもA列に主キーがはっています)、
テーブル1、2のA列が共通のデータについてテーブル1のB列のデータを
更新するという内容です。
つまり、結果として、テーブル1が
A | B |
111 | かかか |
222 | ききき |
333 | ううう |
となればOK(333は更新されない)。
家のパソコンにはORACLEが入ってないのでちょっと試してないのですが、
以下のようなUPDATE文でうまくいきました。
UPDATE テーブル1 T1 SET
B = (
SELECT B FROM テーブル2 T2
WHERE T1.A=T2.A
)
WHERE EXISTS (
SELECT * FROM テーブル2 T2
WHERE T1.A=T2.A
)
こうやって狙ったデータだけ一括更新できると便利ですね。
SQLは覚えれば覚えるほど色々なことができると改めて感じました。
スポンサーサイト