- PR -

updateをキーでマッチしたレコードにかけたい

投稿者投稿内容
take
大ベテラン
会議室デビュー日: 2004/08/13
投稿数: 177
お住まい・勤務地: 沖縄県北部
投稿日時: 2006-02-04 01:32
引用:

せんさんの書き込み (2006-02-03 18:40) より:
引用:

おみそれしました。


(1)会っても気づかなかったり、だれであるか思い出せなかったりした時に言う語。
「これは―しました」

(2)相手の能力・技量などをみそこなっていたことをわびる気持ちを表していう語。
「見事なお手並み、―しました」



本来の意味はそうだったのですね、自分も知らずに使っていました。
昔見た平成教育委員会で、上司とゴルフに行ったときにナイスショットを
ほめる言葉の回答が「おみそれしました」だったのでつい使ってしまったのです。
決して侮辱の意味を込めて使ってるわけではないのでどうか誤解なさらないで
下さい。どちらにしても使い方間違ってましたね。気をつけよう。

今日はAnthyhimeさんから教えてもらった方法で何とか切り抜けたのですが、
苦し紛れっぽいやり方をしてしまいました。もっとスマートな方法を知ってる
方がいそうなので再度質問させていただきます。

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)

アップデートする値をSELECTで持ってくるとき、テーブル3つを結合したサブクエリ
を使用しています。結構長いSQLで、EXISTS( の後ろで別名を使えたらいいなー
と思って別名をつけてexistsしてみたら、「未定義のテーブルです」ということで
怒られました。なのでまったく同じSQLを2回書きました。値のセットとEXISTSの
後ろですね。
これって別名使えないんでしょうか?ご存知の方、ご教示いただけると幸いです。
よろしくお願いします。
末記人
大ベテラン
会議室デビュー日: 2005/12/05
投稿数: 233
お住まい・勤務地: あわにこ
投稿日時: 2006-02-04 02:03
MySQLならこんな書き方が出来るんですけど
DB2ではどうですかね?

update t_up u, t_atai a
set u.f_data = a.f_data
where u.f_key = a.f_key

t_ataiの f_keyはユニークなんですかね?
だとしたらサブクエリの書き方も existsじゃなくてもよさ気ですが
というかユニークでなければ set部分にあるサブクエリがエラーになりますね。

update t_up u set f_data=
(select a.f_data from t_atai a where u.f_key=a.f_key)
where u.f_key=a.f_key;

DB2は見たことも触ったこともないので的外れかもしれませぬ。
とんくま
ベテラン
会議室デビュー日: 2005/08/02
投稿数: 56
お住まい・勤務地: 東京
投稿日時: 2006-02-04 03:55
こんなやり方も有ります。t_ataiのスキャンが1回で済むので、EXISTSを使うよりパフォーマンスがよいように思います。
コード:
UPDATE (SELECT *
          FROM (SELECT f_data
                     , (SELECT f_data
                          FROM t_atai a
                         WHERE a.f_key = u.f_key)
                 FROM t_up u
               ) u1 (u_data, a_data)
         WHERE a_data IS NOT NULL
       ) u2
   SET u_data = a_data;


take
大ベテラン
会議室デビュー日: 2004/08/13
投稿数: 177
お住まい・勤務地: 沖縄県北部
投稿日時: 2006-02-07 19:04
返答遅れました、申し訳ないです。
せっかくご返答いただいた方法も今ちょっとテストする環境が
なくなってしまったので確認できない状態です。

確認できる状態になり次第ご報告させていただきますが、
ひとまずここでお礼だけ述べさせていただきます。

ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)