• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PL/SQLでUPDATE別テーブル条件を付加する)

PL/SQLでUPDATE別テーブル条件を付加する

このQ&Aのポイント
  • 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 );

質問者が選んだベストアンサー

  • ベストアンサー
  • sueoka
  • ベストアンサー率38% (24/62)
回答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では無いかも知れませんが、 取りあえず思いついたのはこれくらいです。 長々と書いてしまいましたが、 的外れの回答だったら、すんません

noname#11049
質問者

お礼

まだ、試していませんが頑張ってやってみます。 迅速なアドバイスありがとうございました。

関連するQ&A