FROM句にターゲットテーブルを更新できないというMySQLエラーを解決する方法

MySQLで「FROM句に含まれるターゲット テーブルを更新することはできません」というエラーは、SELECTしているテーブルを同時に更新しようとすると発生しがち。これは MySQL が同一のクエリ内で同一のテーブルを更新および SELECT することを許可しないためです。

要解决这个问题,可以使用临时表或子查询来避免在FROM子句中更新目标表。

解決策をいくつか示しています。

  1. テンポラリテーブル使用:クエリ結果をテンポラリテーブルに格納して、それをアップデート処理するためのテンポラリテーブルを作成する。
CREATE TEMPORARY TABLE temp_table AS (SELECT * FROM your_table WHERE condition);
UPDATE temp_table SET column = value;
  1. 副問い合わせを使った方法:更新したいテーブルを副問い合わせの一部として抽出し、その副問い合わせを使って更新を実行する。
UPDATE your_table SET column = value WHERE id IN (SELECT id FROM your_table WHERE condition);
  1. クエリーと更新の分割:クエリーと更新操作を2つの異なるクエリー文に分割し、更新操作の前にはクエリー操作が完了していることを確認する。
SET @id := (SELECT id FROM your_table WHERE condition);
UPDATE your_table SET column = value WHERE id = @id;

ただし、上記の対処方法は具体的なクエリとアップデートのニーズによって適用可能なものが異なっている点に注意してください。それぞれの状況にあった方法を選択し、クエリやアップデート文を適切に変更してください。

bannerAds