dポイントプレゼントキャンペーン実施中!

はじめまして

テーブルAとBがあります

テーブルAをUPDATEする時にBのフィールドの値を使うのはわかるのですが

UPDATE A SET A.フィールド =
(SELECT B.フィールド FROM B WHERE Bの条件)

ここで、B.フィールドの値が'X'なら、そのまま代入。違う場合は'Y'を入れるような場合、1回のSQLで出来るでしょうか?

出来るのであれば、どのようなSQLか御教授願います。よろしくお願いします。

A 回答 (3件)

UPDATE A SET A.フィールド =


(SELECT decode(B.フィールド,'X',B.フィールド,'Y') FROM B WHERE Bの条件)
where Bの条件
;

とか

UPDATE A SET A.フィールド =
(SELECT case when B.フィールド='X' then B.フィールド else 'Y' end FROM B WHERE Bの条件)
where Bの条件
;

テーブルBに合致するレコードがない場合に、どうするか考えれて、SQLを書かねばなりません。
上記の例は、合致するレコードがなければ何もしないSQLです。
    • good
    • 0
この回答へのお礼

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

皆さんの回答を参考にさせていただきました

また、夏休み中にネット環境から離れていたためにお礼が遅くなったことをお詫びいたします。

お礼日時:2008/08/18 08:59

No.1です。

NVLの位置まちがえました。

UPDATE A SET A.フィールド =
NVL((SELECT
(CASE WHEN B.フィールド='X' THEN B.フィールド ELSE 'Y' END)
FROM B WHERE Bの条件=Aのキー),'Y')
    • good
    • 1
この回答へのお礼

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

実際には条件が複雑なので、そのままとは行かず苦労しましたが、
おかげで解決できました。

また、夏休み中にネット環境から離れていたためにお礼が遅くなったことをお詫びいたします。

お礼日時:2008/08/18 08:58

できます。


Bに該当するものがない場合でもYを入れるにはNVLもかけておくと無難です。

UPDATE A SET A.フィールド =
(SELECT
NVL((CASE WHEN B.フィールド='X' THEN B.フィールド ELSE 'Y' END),'Y')
FROM B WHERE Bの条件=Aのキー)
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!