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 );
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では無いかも知れませんが、
取りあえず思いついたのはこれくらいです。
長々と書いてしまいましたが、
的外れの回答だったら、すんません
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle SQL update方法 2 2022/06/22 14:07
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- Oracle sqlで質問です。 aテーブルとbテーブルがあり、下記のsqlで取得したidとnameに一致しないレ 1 2022/04/20 20:34
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- MySQL UPDATE my_items SET item_name '赤い,甘い,ケーキ' WHERE id 1 2023/01/03 09:52
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Oracle sqlで質問です。 idを元にidに紐付くデータで住所コードがjpのみのデータ以外のidを取得したい 4 2023/03/20 17:41
- Oracle sqlのupdate文で質問です。 テーブルBの番号をキーにテーブルAの身長をテーブルBの身長に更新 2 2022/11/02 15:15
- MySQL 下の画像はSQLの4大命令の性質をまとめたものであるらしいです UPDATE INSERT DELE 1 2023/06/07 15:36
- Access(アクセス) アクセス 削除するレコードを含んだテーブルを指定してくださいのエラー対処方法 1 2022/11/24 15:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
ビューのソートについて
-
Accessのテーブルデータを一気...
-
ERROR1062:Duplicate entry.......
-
テーブルで一番古いレコードだ...
-
Oracleで上書きImportはできま...
-
マテリアライズドビューとスナ...
-
MS Accessを共有した際にファイ...
-
アクセス レコードセットを更...
-
同一テーブルのデータを参照し...
-
Accessの処理速度を速めるため...
-
ACCESSとEXCELLの共用
-
sqlにおけるテーブル名と各カラ...
-
SQL Server に画像を登録
-
ACCESSで容量が50MBになった...
-
MYSQLでコード番号を自動でつけ...
-
このISAMでは、リンクテーブル・・
-
SQL文の結合(一対多)がわから...
-
構文エラー : 演算子がありませ...
-
分単位でログ集計するためカウ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
Oracleで上書きImportはできま...
-
テーブルで一番古いレコードだ...
-
accessでレコード更新直後の反...
-
ビューのソートについて
-
このISAMでは、リンクテーブル・・
-
同一テーブルのデータを参照し...
-
アクセス レコードセットを更...
-
マテリアライズドビューとスナ...
-
住所のDBテーブル、マスターの...
-
ACCESSで容量が50MBになった...
-
重複クエリを使ったデータ削除
-
処理の途中で停止させ、再開さ...
-
結合テーブルでINSERTする方法...
-
SQL文の結合(一対多)がわから...
-
ERROR1062:Duplicate entry.......
-
IF NOT EXISTを使用するINSERT文
-
htmlコードで書かれた表にphpで...
-
Accessのインポートについて(上...
おすすめ情報