質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

10571閲覧

OracleのUpdateにおいて3つテーブル結合結果を複数条件として更新したい

msy47

総合スコア26

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2019/01/16 04:32

前提・実現したいこと

OracleのUpdateにおいて、
3つのテーブルを結合した結果をもとに複数の項目を条件に、1つのテーブルの更新を行いたい。

内容
1.3つのテーブルを結合したSelect結果
2.「1.」の結果のもと、複数の項目条件でテーブルの1つの項目すべてを一括更新したい

質問
「内容2.」を実現できるUpdate文についてご教授をお願いいたします。
Select文の抽出結果から4つの項目条件をもとに
Cテーブルの対象レコードすべてを更新したい

いくつか調べた結果近しい
SQL文(2つまでのテーブルを結合したパターン、Select条件結果が1項目までなど)
を見つけることができましたが、実現したいSQLを作成するに至れませんでした。

該当のソースコード

Oracle

1テーブル(3つ) 2 3Table A 4 バッチ番号, バッチ・タイプ 5Table B 6 バッチ番号, バッチ・タイプ, 伝票番号, 伝票会社 ,転記コード 7Table C 8 バッチ番号, バッチ・タイプ, 伝票番号, 伝票会社 ,転記コード 9 10補足: 11Table BとTable Cそれぞれの転記コードが異なっており、それらを統一したいため。 12 13Select 14 DISTINCT C.伝票番号, 15 C.伝票タイプ, 16 C.伝票会社, 17 C.転記コード 18From 19 A 20inner join B on( 21 B.バッチ番号 = A.バッチ番号 22 and 23 B.バッチ・タイプ = A.バッチ・タイプ 24 ) 25inner join C on( 26 B.伝票番号 = C.伝票番号 27 and 28 B.伝票会社 = C.伝票会社 29 ) 30where 31 A.バッチ・タイプ = 'A' 32and 33 A.バッチ状況 = 'B' 34and 35 B.転記コード = 'C' 36and 37 C.転記コード = 'D'

試したこと

selectの結果4項目の条件をもとにテーブルCの対象すべてのC.転記コードを更新したい

Update条件:
Select結果の、C.伝票番号, C.伝票タイプ, C.伝票会社, C.転記コード = 'D'に合致した
対象レコードすべてのC.転記コードを'Z'に更新したい。

Update C
Set C.転記コード = 'Z'
from
(
select文?(不明)
)
where文?(不明)

補足情報(FW/ツールのバージョンなど)

なし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

質問の条件についての項目名などが統一されておらず、ずれているかもしれませんが、おそらく以下の様なことかと。

SQL

1update c set 転記コード='Z' 2where 転記コード = 'D' 3 and (伝票番号, 伝票会社) in ( 4 select 伝票番号, 伝票会社 5 From A inner join B 6 on B.バッチ番号=A.バッチ番号 and B.バッチ・タイプ=A.バッチ・タイプ 7 where A.バッチ・タイプ='A' and A.バッチ状況='B' and B.転記コード='C' 8 )

SQL文(2つまでのテーブルを結合したパターン、Select条件結果が1項目までなど)
を見つけることができましたが、実現したいSQLを作成するに至れませんでした。

例は2つのテーブルですが、更新可能なビューであればテーブル数は関係ありません。
SQL 入門 (DMLの基本形式:UPDATE)

投稿2019/01/16 05:10

sazi

総合スコア25188

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

msy47

2019/01/16 06:02

sazi様 迅速でわかりやすい回答ありがとうございます。動作を確認できました。助かりました。 読みずらい質問から適格かつ丁寧な回答、誠にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問