2

テーブル「従業員」があり、いくつかの属性 (給与など) をテーブル内の他の値と同じ値に設定しようとしています。このエラーについての私の理解では、一時テーブルを使用して、次の回避策で回避できるということです。

UPDATE employees
SET salary=(SELECT salary FROM (SELECT * FROM employees WHERE employee_id= '123') AS t1)
WHERE employee_id='456';

ただし、これを試しても同じエラー コード (「FROM 句での更新にターゲット テーブル 'employees' を指定できません」) が表示されます。ここに他の問題がありますか?

4

1 に答える 1

2

問題はmysql 5.7の機能変更です。最後までスクロールしてください

オプティマイザは、FROM 句の派生テーブルとビューを一貫した方法で処理するようになり、不要な実体化をより適切に回避し、より効率的な実行計画を生成するプッシュダウン条件を使用できるようになりました。ただし、テーブルを変更する DELETE や UPDATE などのステートメントの場合、以前にマテリアライズされた派生テーブルにマージ戦略を使用すると、ER_UPDATE_TABLE_USED エラーが発生する可能性があります。

JOIN を使用するか、otimizer を強制的に以前のバージョンのように動作させます。

SET optimizer_switch = 'derived_merge=off';
于 2015-11-16T14:38:01.607 に答える