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

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

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

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

SQL

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

Q&A

解決済

1回答

15402閲覧

一度のUPDATE文で複数行を更新したい

unksan24

総合スコア9

Oracle

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

SQL

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

0グッド

1クリップ

投稿2020/08/18 12:07

編集2020/08/18 13:44

前提・実現したいこと

WRKのCORDがMSTのCORDに含まれているかつ、PRICEが違う場合、
WRKのPRICEをMSTのPRICEに上書きするというSQLを実行したいです。
ですが、現状このSQLを実行すると「単一行副問合せにより2つ以上の行が戻されます」とエラーがでてしまいます。どうしたらエラーを起こさなくできますか?教えてください。
※一度のUPDATE文で実行したいです。。
MSTテーブル
CORD,PRICE
1000,1
1100,10
11001,10
11009,10
1200,100

WRKテーブル
CORD
1000,10
1100,100
1200,1000

■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

ORA-1427: 単一行副問合せにより2つ以上の行が戻されます

### 該当のソースコード UPDATE MST M SET M.PRICE = (SELECT W.PRICE FROM WRK W WHERE M.CORD =W.CORD AND M.PRICE <> W.PRICE) WHERE M.CORD = (SELECT WW.CORD FROM WRK WW,MST MM WHERE WW.CORD IN (MM.CORD) AND MM.PRICE <> WW.PRICE); ```ここに言語名を入力 ORACLESQLDEVELOPER ソースコード

実現したいこと

MSTテーブル
CORD,PRICE
1000,10
1100,100
11001,100
11009,100
1200,1000

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

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

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

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

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

sazi

2020/08/18 13:30 編集

条件の方のSQLを見直して下さい。 WWRKというテーブルが出現していますが、質問にはありません。
unksan24

2020/08/18 13:43

記載間違えていましたね、すみません
Orlofsky

2020/08/18 13:52

>M.CORD = (SELECT W.CORD FROM WWRK W,MMST M MMST というテーブルもテーブル定義がないです。 SQLで使われるテーブルはCREATE TABLEを実行しなければなりません。テーブルの中のデータもINSERTされていなければなりません。 質問に CREATE TABLE, INSERT を https://teratail.com/help/question-tips#questionTips3-7 の [コード] で追記できた方が適切なコメントが付き易いです。
guest

回答1

0

ベストアンサー

両テーブル共にCODEで一意なら、update のwhere条件の=INに変更すればエラーは解消されると思います。

若しくは以下のようなSQLでも。

SQL

1UPDATE MST M SET 2 PRICE = (SELECT PRICE FROM WRK WHERE CORD=M.CORD) 3WHERE PRICE <> (SELECT PRICE FROM WRK WHERE CORD=M.CORD)

SQL

1update ( 2 select m.price mprice, w.price wprice 3 from mst m inner join wrk w 4 on m.code=w.code 5 where m.price <> w.price 6) 7set mprice = wprice

投稿2020/08/18 13:48

編集2020/08/18 13:50
sazi

総合スコア25206

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問