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 サイトの他の関連記事を参照してください。