ホームページ > データベース > mysql チュートリアル > 結合を使用した Oracle UPDATE クエリによって無限ループが発生するのはなぜですか?

結合を使用した Oracle UPDATE クエリによって無限ループが発生するのはなぜですか?

Linda Hamilton
リリース: 2024-12-24 00:04:15
オリジナル
370 人が閲覧しました

Why Does My Oracle UPDATE Query with a Join Cause an Infinite Loop?

Oracle の結合クエリを使用した更新: 無限ループのトラブルシューティング

提供された Oracle UPDATE クエリが無期限に実行されるため、何が考えられるかという疑問が生じます。この問題の原因となっています。クエリは、他の 2 つのテーブルを結合する相関サブクエリを使用して、table1 の列を更新しようとします。

無限ループの根本原因は、単一のテーブルを確実に返す条件がサブクエリに存在しないことが原因と考えられます。 table1 の各行の行。このような条件がないと、サブクエリが複数の行を返す可能性があり、単一行更新操作に対する UPDATE ステートメントの要件に違反する可能性があります。

この問題を解決するには、条件を追加する必要があります。 table1 の行をサブクエリの行に関連付けるサブクエリ。これには通常、AND 句を使用してテーブル間で主キーまたは一意キーを照合することが含まれます。例:

UPDATE table1 t1 SET (t1.col,t1.Output) = (
  SELECT t2.col, t3.Output + t2.col
  FROM tabl2 t3 
  LEFT JOIN table1 t2 ON t3.Join_Key = t2.Join_Key
  WHERE t2.col is not NULL
    AND t1.some_key = t2.some_key);
ログイン後にコピー

この例では、条件 AND t1.some_key = t2.some_key により、サブクエリが table1 の各行に対して最大 1 行を返すようになり、無限ループが防止されます。

もう 1 つの重要な考慮事項は、UPDATE ステートメントが table1 内のすべての行を更新することを目的としているのか、それともそのサブセットのみを更新することを目的としているのかということです。元のクエリには WHERE 句が含まれておらず、すべての行を更新することを示していますが、これは望ましい動作ではない可能性があります。行の特定のサブセットのみを更新する必要がある場合は、WHERE 句を追加して、更新基準を満たす行をフィルターする必要があります。

以上が結合を使用した Oracle UPDATE クエリによって無限ループが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート