ホームページ >データベース >mysql チュートリアル >Oracle SQL で JOIN を使用してテーブルの列を正しく更新する方法

Oracle SQL で JOIN を使用してテーブルの列を正しく更新する方法

Susan Sarandon
Susan Sarandonオリジナル
2024-12-22 13:48:10325ブラウズ

How to Correctly Update a Table Column Using a JOIN in Oracle SQL?

JOIN を使用した Oracle Update Query

JOIN 操作を使用して列を更新しようとすると、例外が発生しました: ORA-00933: SQL コマンドが正しく終了しませんでした。次のクエリはこの問題を示しています。

UPDATE tab1
   SET tab1.total_adjusted_cost = tab1.total_adjusted_cost + t1.total
 FROM table1 tab1, 
      (SELECT tab3.name, tab3.add, SUM(tab2.amount) AS total
         FROM table2 tab2,
              table3 tab3,
              table4 tab4
        WHERE tab2.id = tab3.id
          AND tab3.id = tab4.id
          AND tab4.indicator = 'Y'
        GROUP BY tab3.name, tab3.add ) t1
WHERE tab1.id = t1.id;

解決策

エラーを解決するには、クエリでサブクエリを使用した UPDATE ではなく MERGE ステートメントを使用する必要があります。 MERGE ステートメントを使用すると、単一のステートメントで更新操作と挿入操作の両方を実行できます。 MERGE を使用した修正されたクエリは次のとおりです。

merge into table1 tab1 
using
(
SELECT tab3.name, tab3."add", SUM(tab2.amount) AS total
  FROM table2 tab2,
    table3 tab3 ,
    table4 tab4
  WHERE tab2.id        = tab3.id
  AND tab3.id            = tab4.id
  AND tab4.indicator             ='Y'
  GROUP BY tab3.name,
    tab3."add"
)t1
on(tab1.id      = t1.id)
when matched then 
update set tab1.total_adjusted_cost = tab1.total_adjusted_cost + t1.total

この MERGE ステートメントは、テーブル 1 の行とサブクエリ t1 を結合条件 tab1.id = t1.id で評価します。一致するものが見つかると、サブクエリからの合計値を追加して、table1 の total_adjusted_cost 列を更新します。

以上がOracle SQL で JOIN を使用してテーブルの列を正しく更新する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。