ホームページ >データベース >mysql チュートリアル >MySQL エラー 1093:「FROM 句で更新のターゲット テーブルを指定できません」を解決する方法?
MySQL エラー 1093: クエリ制限の更新
質問:
サブクエリを使用して pers
テーブルを更新しようとすると、「FROM 句で更新の対象テーブルを指定できません」というエラーが発生します (エラー 1093)。
クエリ:
<code class="language-sql">UPDATE pers P SET P.gehalt = P.gehalt * 1.05 WHERE (P.chefID IS NOT NULL OR gehalt <p><strong>原因:</strong></p><p>MySQL 不允许在子查询中引用正在更新的同一表。</p><p><strong>解决方案:</strong></p><p>要解决此问题,请将外部表引用(pers)在子查询中用嵌套子查询括起来:</p> ```sql UPDATE pers P SET P.gehalt = P.gehalt * 1.05 WHERE (P.chefID IS NOT NULL OR gehalt <p><strong>说明:</strong></p><p>通过使用 `SELECT * FROM pers` 创建嵌套子查询,我们隐式地创建了一个临时表,可以在子查询中引用它,而不会违反 MySQL 的限制。这允许我们使用所需的条件更新 `pers` 表。</p></code>
改善された解決策 (より明確な例):
解決策をより明確に示すために、サブクエリの代わりに JOIN ステートメントを使用できます。
<code class="language-sql">UPDATE pers p INNER JOIN (SELECT chefID, gehalt FROM pers) AS subquery ON p.chefID = subquery.chefID AND p.gehalt = subquery.gehalt SET p.gehalt = p.gehalt * 1.05 WHERE p.chefID IS NOT NULL OR p.gehalt < ...;</code>
このメソッドは、サブクエリ内の pers
テーブルの直接参照を回避するため、MySQL の制限を回避します。 subquery
一時テーブルとして機能し、安全な更新操作を可能にします。 WHERE
の部分は実際の ...
条件に基づいて補足する必要があることに注意してください。
以上がMySQL エラー 1093:「FROM 句で更新のターゲット テーブルを指定できません」を解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。