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

いつもお世話になっています。

UPDATEの書き方について教えて下さい。

以下のようなUPDATE文を作成しました。
処理的には必要な結果を返してくれていますが、もう少しシンプルには
ならないでしょうか?

UPDATE文がまだ理解出来ていないのですが、”WHERE EXISTS(”以降に
書いているSELECT文は、SET文の値算出時にも同じSELECT文を書いて
いるのですが、それを代用することは出来ないのでしょうか?
(SELECTの結果をWHERE文の中で簡単に呼び出して使えないのでしょうか?)

※うまく内容が伝わってないかもしれませんが、どうぞよろしくお願いします。

<<<更新処理>>>
UPDATE TBL01 SET(
TBL01_MARNO,
TBL01_UPDYMD
)=(
SELECT
TBL02_MARNO,
TO_NUMBER(TO_CHAR(SYSDATE,'YYYYMMDD'))
FROM
(SELECT
TBL02_TENCD,
TBL02_REN,
TBL02_MARNO,
TBL02_UPDKBN,
RANK ()
OVER (PARTITION BY TBL02_TENCD,
TBL02_REN
ORDER BY TBL02_YMD DESC,
TBL02_DAT DESC
) WRK_RANK
FROM TBL02
WHERE TBL02_OKFLG = 1
)
WHERE TBL02_TENCD = TBL01_TENCD
AND TBL02_REN = TBL01_REN
AND WRK_RANK = 1
AND TBL02_UPDKBN = 2
)
WHERE EXISTS(
SELECT 'TRUE'
FROM
(SELECT
TBL02_TENCD,
TBL02_REN,
TBL02_MARNO,
TBL02_UPDKBN,
RANK ()
OVER (PARTITION BY TBL02_TENCD,
TBL02_REN
ORDER BY TBL02_YMD DESC,
TBL02_DAT DESC
) WRK_RANK
FROM TBL02
WHERE TBL02_OKFLG = 1
)
WHERE TBL02_TENCD = TBL01_TENCD
AND TBL02_REN = TBL01_REN
AND TBL02_UPDKBN = 2
AND WRK_RANK = 1
);

A 回答 (1件)

UPDATE文のWHERE句(WHERE文ではなく句です)のEXISTSでSET句と同様のSELECT文を記述するのは、


その条件がないとSET句のSELECT文で取得できるデータがないときに値がNULLになってしまうからです。
今回の場合であれば、WHERE句にはSET句のSELECT文をそのまま記述しなくても
WHERE EXISTS(
SELECT 'TRUE'
FROM TBL02
WHERE TBL02_OKFLG = 1
AND TBL02_TENCD = TBL01_TENCD
AND TBL02_REN = TBL01_REN
AND TBL02_UPDKBN = 2
);
で大丈夫だと思います。
要はSET句に書くSELECT文で必ず値が取得できる条件を書けばいいです。

>(SELECTの結果をWHERE文の中で簡単に呼び出して使えないのでしょうか?)
そういうことは出来ないです。
    • good
    • 0
この回答へのお礼

yamada_g 様

ご回答、ありがとうございます。
ご提示いただいた内容で処理を進めることが出来ました。
WHERE句の存在もなんとなく分かりかけてきました。

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

また、よろしくお願いいたします。

お礼日時:2011/01/13 15:41

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