はじめまして。
副問い合わせを使ったUPDATE文でわからない点があり、質問させていただきます。
使用しているDBはORACLE10gです。
SALARYとEMPLOYEESという二つのテーブルがあり、SALARY列とEMPLOYEES列には主キーとなるEMPLOYEEID列があります。
ここで、以下のSQLを発行した際に【1】は正しく更新され、【2】は「ORA-01427:単一行副問い合わせにより2つ以上の行が戻されます」というエラーが出ます。
whereを使った結合とjoinを使った結合は同じだと思っていたのですが、なぜこのように結果が異なるのかがわかりません。
どなたかご教示いただけないでしょうか。
【1】
UPDATE SALARY
SET SALARY.AMOUNT = SALARY.AMOUNT +
(SELECT AMOUNT FROM EMPLOYEES INNER JOIN SALARY s ON EMPLOYEES.EMPLOYEEID = s.EMPLOYEEID)
【2】
UPDATE SALARY
SET SALARY.AMOUNT = SALARY.AMOUNT +
(SELECT AMOUNT FROM EMPLOYEES WHERE SALARY.EMPLOYEEID = EMPLOYEES.EMPLOYEEID)
説明不足の点があればご指摘ください。よろしくお願いします。
No.1ベストアンサー
- 回答日時:
これは明らかに結論が逆です。
【1】は失敗し、【2】は正しく更新されます。
【2】はいわゆる「相関副問い合わせ」なっており、副問い合わせの中でUPDATEの対象のSALARYテーブルを参照しています。したがって、SALARY1行につき正しくAMOUNTが1つ選択され、正しく更新されます。
一方、【1】は単なる「副問い合わせ」であり、副問い合わせの中のSALARYは更新対象となるSALARYとは別のテーブルと見なされています。
だから複数行が返ってエラーになります。
(おそらくこのケースではJOINを使った書き換えはできないのでは)
jamshid6さん、回答ありがとうございました。
ご指摘のとおりでした。
相関副問い合わせというんですね。
これから勉強してきます。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Oracle SQL update方法 2 2022/06/22 14:07
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- 英語 ofについて。 4 2022/06/20 20:15
- 英語 "an amount of"の意味等について 2 2023/06/13 12:19
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- 英語 総称的意味の「the+過去分詞」が無冠詞複数形で置き換えることができない理由について 5 2022/08/04 10:14
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- 英語 The word ? means prices, salary, or cost. ?に入る語句は何 7 2022/09/30 23:35
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
うまくいきません教えてくださ...
-
SQLです。こんな感じですか?あ...
-
accessで在庫管理
-
update文で改行を入れる
-
SELECT 文の NULL列は?
-
テーブルリンク リンク元を知...
-
テーブル名をカラムとして取得...
-
一つ前に戻るには…
-
Accessのテーブルデータを一気...
-
Accessでデータシートに同じデ...
-
会社の飲み会の幹事になり、座...
-
Notion@リレーション値の取得...
-
件数の多い順にselect
-
外部キーだけのテーブル(主キ...
-
SQL、2つのテーブルで条件一致...
-
男性と2人で飲食店に行きテーブ...
-
JavaScriptでAccessのテーブル...
-
「テーブルに座って……」という...
-
論理名とコメント構文(?)について
-
SQL update方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLです。こんな感じですか?あ...
-
うまくいきません教えてくださ...
-
下記の問合せを行うクエリを、P...
-
下記の問合せを行うクエリを、P...
-
accessで在庫管理
-
サブクエリを使用せずにLEFT JO...
-
現在庫算出方法についてお教え...
-
SQL CASE文に制御について
-
access結合クエリを編集可能に
-
相関サブクエリの中で、グルー...
-
Access 出荷管理簿を作りたい...
-
SQLの作成方法
-
グループごとの最高得点者一覧...
-
update文におけるwhereとjoinの...
-
Accessでデータシートに同じデ...
-
SELECT 文の NULL列は?
-
テーブル名をカラムとして取得...
-
SQL、2つのテーブルで条件一致...
-
一つ前に戻るには…
-
update文で改行を入れる
おすすめ情報