ホームページ >データベース >mysql チュートリアル >JOIN を使用した Oracle UPDATE クエリがハングするのはなぜですか? それを修正するにはどうすればよいですか?

JOIN を使用した Oracle UPDATE クエリがハングするのはなぜですか? それを修正するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-31 15:30:11749ブラウズ

Why Does My Oracle UPDATE Query with a JOIN Hang, and How Can I Fix It?

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

次の UPDATE クエリを実行するとき:

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);

ユーザー無期限実行エラーが発生する可能性があります。この記事では、この問題を詳しく掘り下げ、解決策を示します。

問題: 一意でないサブクエリ結果

エラーの根本原因は、UPDATE 内のサブクエリにあります。声明。サブクエリが table1 の各行に対して 1 つの行を返さない限り、更新操作は失敗します。サブクエリ内の LEFT JOIN では、複数の行が一致する可能性があり、非決定的な更新につながる可能性があります。

解決策: 単一行のサブクエリが返されることを確認する

この問題では、table1 の行をサブクエリの行に関連付けて、サブクエリが単一の値を返すようにするための条件が必要です。 行。これは、一意のキーによって行と一致する結合条件を追加することで実現できます。

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);

更新のアドレス指定範囲

もう 1 つの考慮事項は、 UPDATE ステートメントは、table1 内のすべての行に影響を与える可能性があります。これが意図された動作なのか、それともより選択的な更新が必要なのかを評価することが重要です。 UPDATE ステートメントに追加の WHERE 条件を含めることで、ユーザーは必要に応じて更新の範囲を特定の行に制限できます。

以上がJOIN を使用した Oracle UPDATE クエリがハングするのはなぜですか? それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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