- - PR -
updateをキーでマッチしたレコードにかけたい
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-02-04 01:32
本来の意味はそうだったのですね、自分も知らずに使っていました。 昔見た平成教育委員会で、上司とゴルフに行ったときにナイスショットを ほめる言葉の回答が「おみそれしました」だったのでつい使ってしまったのです。 決して侮辱の意味を込めて使ってるわけではないのでどうか誤解なさらないで 下さい。どちらにしても使い方間違ってましたね。気をつけよう。 今日は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の 後ろですね。 これって別名使えないんでしょうか?ご存知の方、ご教示いただけると幸いです。 よろしくお願いします。 | ||||||||
|
投稿日時: 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は見たことも触ったこともないので的外れかもしれませぬ。 | ||||||||
|
投稿日時: 2006-02-04 03:55
こんなやり方も有ります。t_ataiのスキャンが1回で済むので、EXISTSを使うよりパフォーマンスがよいように思います。
| ||||||||
|
投稿日時: 2006-02-07 19:04
返答遅れました、申し訳ないです。
せっかくご返答いただいた方法も今ちょっとテストする環境が なくなってしまったので確認できない状態です。 確認できる状態になり次第ご報告させていただきますが、 ひとまずここでお礼だけ述べさせていただきます。 ありがとうございました。 |