- ベストアンサー
PL/SQLでUPDATE別テーブル条件を付加する
- PL/SQLでUPDATEする際、別のテーブルからの条件も付加し更新を行いたいのですが、可能でしょうか?
- テーブル名T_NAMEのSEI='1'の時以下のロジック処理を行いたいのです。
- UPDATE T_ADRS SET DLT_FLG = '1', USER_ID = inUSER_ID, TNMT_ID = inCOMP_ID, UPD_DT = SYSDATE WHERE RTRIM(ADR_CD) = RTRIM(strADR_CD) AND RTRIM(DATA_SY) = RTRIM(strDATA_SY) AND RTRIM(IMP_NO ) = RTRIM(strIMP_NO );
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんばんわ ちょっと自信がないのですが・・・ 質問の内容は、 1)必ずT_NAMEとリンクさせて、T_NAMEのSEIが'1'のデータのみ更新対象とする 2)T_NAMEに存在しないデータも更新対象とするが、T_NAMEのSEIが'1'のデータは 特別に更新項目が追加される のどちら(又は、どちらでもない?)でしょうか? まず1)の場合ですが、 UPDATE T_ADRS TBL_A SET DLT_FLG = '1' WHERE ...(中略)... AND EXISTS( SELECT 1 FROM T_NAME TBL_N WHERE TBL_A.ID = TBL_N.ID AND TBL_N.SEI = '1' AND ROWNUM = 1) とすれば実現できるかと。 EXISTSと言うのは「存在する」と言う意味で、 EXISTSに続く括弧内のSELECT文に対応するデータが存在するかどうかを判定してくれます。 で、実際のSELECT文の内容ですが、更新対象のテーブル「T_ADRS」と 条件判断様のテーブル「T_NAME」をリンクさせて、条件文を記述しています。 このSELECT文に該当するデータが存在する場合はEXISTSがTRUEになりますので、 更新対象となり、該当するデータが存在しない場合は更新対象になりません。 次に2)の方ですが、 UPDATE T_ADRS TBL_A SET DLT_FLG = ( SELECT DECODE( TBL_N.ID, '1', '1', TBL_A.DLT_FLG) FROM T_NAME TBL_N WHERE TBL_A.ID = TBL_N.ID(+) AND ROWNUM = 1 ) WHERE ...(後略) で大丈夫だったと思います・・・ これは、SELECT文の内容をDLT_FLGにSETする・・・と言うSQLですが、 SELECTの内容はT_NAMEを外部結合しています。 これによって、T_NAMEが存在しない場合はそのままT_ADRSのDLT_FLGを使い、 存在しかつSETが'1'の場合は'1'で更新します。 ※存在するがSEIが'1'では無い場合はDLT_FLGが使われます。 余り良いSQLでは無いかも知れませんが、 取りあえず思いついたのはこれくらいです。 長々と書いてしまいましたが、 的外れの回答だったら、すんません
お礼
まだ、試していませんが頑張ってやってみます。 迅速なアドバイスありがとうございました。