ホームページ >データベース >mysql チュートリアル >MySQL エラー 1093: FROM 句で更新のターゲット テーブルを指定できませんを解決するにはどうすればよいですか?

MySQL エラー 1093: FROM 句で更新のターゲット テーブルを指定できませんを解決するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-17 10:59:26721ブラウズ

How Can I Resolve MySQL Error 1093: Can't Specify Target Table for Update in FROM Clause?

MySQL エラー 1093: FROM 句のテーブル更新の制限について

MySQL エラー「ターゲット テーブル 'table_name を指定できません」 ' FROM 句の更新用」は、テーブル自体の SELECT ステートメント内からテーブルを変更しようとすると発生します。この制限は、MySQL が同じ操作でテーブルの更新と参照を同時に実行できないことに起因します。

エラーへの対処

この問題を解決するには、次のアプローチを検討してください。

  • テーブルに参加してそれ自体:
    クエリを再配置してテーブルに対して自己結合を実行し、一時テーブルを作成します。これにより、元のテーブルの更新が可能になります:
UPDATE story_category a
INNER JOIN story_category b ON a.category_id = b.category_id
SET a.category_id = ...
  • サブクエリのネストをさらに深くする:
    別のサブクエリ内の破損したエントリを識別するサブクエリをネストします。暗黙的な一時的なものを作成するtable:
UPDATE story_category
SET category_id = (
  SELECT id
  FROM (
    SELECT id
    FROM category
    EXCEPT
    SELECT DISTINCT category_id
    FROM story_category
  ) AS x
)
  • クエリ オプティマイザーの無効化:
    MySQL バージョン 5.7.6 以降では、オプティマイザーがサブクエリの削除を試みる場合があります。これを防ぐには、optimizer_switch を無効にします:
SET optimizer_switch = 'derived_merge=off';

注: クエリ オプティマイザーの無効化は長期的な解決策として推奨されるものではなく、一時的な修正としてのみ使用する必要があります。データベースのメンテナンスをより効率的に行うための代替アプローチを検討してください。

以上がMySQL エラー 1093: FROM 句で更新のターゲット テーブルを指定できませんを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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