- - PR -
updateをキーでマッチしたレコードにかけたい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-02 21:57
いつもお世話になります。db2です。
表題の件ですが、イメージ的にはこうです。 db2 => select * from t_up; F_KEY F_DATA ----- ---------- 1 ningen 2 ningen 3 ningen db2 => select * from t_atai; F_KEY F_DATA ----- ---------- 1 gorira 3 kirin 上の二つのテーブルがあります。t_upに更新をかけたいのですが、 t_ataiテーブルと結合して、マッチしたレコードが書き換わって ほしいのです。DB2ではできないといううわさも聞いていますが、 なんとかできそうな感じがしてなりません。 F_KEY F_DATA ----- ---------- 1 gorira 2 ningen 3 kirin 結果としてこうなるのですが、where a.f_key=b.f_key のような結合でやりたいですができないものでしょうか・・・。 ご存知の方がいらっしゃいましたらご教示願います。 | ||||||||
|
投稿日時: 2006-02-03 09:59
自己レスです。
update t_up u set f_data= (select a.f_data from t_atai a where u.f_key=a.f_key); 一応こんな感じでキーにマッチしたレコードに関しては アップデートできるみたいです。 ただし、キーにマッチしなかったレコードが全てNULLに なってしまうので問題かなー。 今回の場合はNULLなってもかまわないのでこれで解決ですが、 キーでマッチしなかったレコードを更新しない方法を ご存知の方がいらっしゃいましたらぜひ教えていただきたいです。 閲覧、思案いただいた皆様に御礼申し上げます。 | ||||||||
|
投稿日時: 2006-02-03 11:20
私はDB2を触ったことはありませんが・・・
マッチしたレコードだけを書き換えるっていうとこんなかんじのSQLになると思いますが、DB2だとムリなんでしょうか? | ||||||||
|
投稿日時: 2006-02-03 15:13
かためろさんご返答ありがとうございます。
自分の環境で試してみたのですが、できないっぽいです。 db2 => update u set u.f_data = a.f_data from t_up u inner join t_atai a on u.f_key = a.f_keydb2 (続き) => db2 (続き) => ; DB21034E コマンドが、有効なコマンド行プロセッサー・コマンドでないため、 SQL ステートメントとして処理されました。 SQL 処理中に、そのコマンドが返されました。 SQL0204N "TAKE.U" は未定義の名前です。 SQLSTATE=42704 SQLServerだとかためろさんのSQLでいけるらしいですね。 私が自己レスでアップしたコードしか使えないのでしょうか。 けっこう融通が利かないんですよね。っていうか使い方知らないだけか(苦笑) | ||||||||
|
投稿日時: 2006-02-03 15:52
こんな感じですかね。
update t_up u set f_data= (select a.f_data from t_atai a where u.f_key=a.f_key) where exists(select * from t_atai a where u.f_key=a.f_key) [ メッセージ編集済み 編集者: Anthyhime 編集日時 2006-02-03 15:52 ] | ||||||||
|
投稿日時: 2006-02-03 17:58
Anthyhimeさんご返答ありがとうございます。
ビンゴでした! そうですか、existsですか。思いつかなかったです。 おみそれしました。やっぱりこれができないと処理がうまくいかない ことに気づいてあせってたとこでして、かなり助かりました。 何とか帰れそうです。ありがとうございました。 | ||||||||
|
投稿日時: 2006-02-03 18:40
(1)会っても気づかなかったり、だれであるか思い出せなかったりした時に言う語。 「これは―しました」 (2)相手の能力・技量などをみそこなっていたことをわびる気持ちを表していう語。 「見事なお手並み、―しました」 | ||||||||
|
投稿日時: 2006-02-03 23:18
私も、初めて意味を知りました。 でも、質問者は意味を知らずに、尊敬の意味を込めて使ったと思いますよ。 使い慣れないけど、よく聴く言葉ってのは難しいですね〜。 |