OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.223323
  • 閲覧数1058
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

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
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル9

ベストアンサー率 38% (24/62)

こんばんわ
ちょっと自信がないのですが・・・

質問の内容は、
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

まだ、試していませんが頑張ってやってみます。
迅速なアドバイスありがとうございました。
投稿日時 - 2002-02-25 09:36:30
-PR-
-PR-
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ