ホームページ >データベース >mysql チュートリアル >MySQL エラー 1093:「FROM 句で更新のターゲット テーブルを指定できません」を解決する方法?

MySQL エラー 1093:「FROM 句で更新のターゲット テーブルを指定できません」を解決する方法?

DDD
DDDオリジナル
2025-01-22 19:42:10203ブラウズ

How to Solve MySQL Error 1093:

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 サイトの他の関連記事を参照してください。

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