Maison > base de données > tutoriel mysql > Comment résoudre l'erreur MySQL 1093 : « Vous ne pouvez pas spécifier la table cible pour la mise à jour dans la clause FROM » ?

Comment résoudre l'erreur MySQL 1093 : « Vous ne pouvez pas spécifier la table cible pour la mise à jour dans la clause FROM » ?

DDD
Libérer: 2025-01-22 19:42:10
original
254 Les gens l'ont consulté

How to Solve MySQL Error 1093:

Erreur MySQL 1093 : mettre à jour la limite de requête

Question :

Lorsque j'essaie de mettre à jour la table pers à l'aide d'une sous-requête, j'obtiens l'erreur "Vous ne pouvez pas spécifier la table cible pour la mise à jour dans la clause FROM" (Erreur 1093).

Requête :

<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>
Copier après la connexion

Solution améliorée (exemple plus clair) :

Pour illustrer la solution plus clairement, une instruction JOIN peut être utilisée à la place d'une sous-requête :

<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>
Copier après la connexion

Cette méthode évite de référencer directement la table pers dans la sous-requête, contournant ainsi les limitations de MySQL. subquery Agit comme une table temporaire, permettant des opérations de mise à jour sécurisées. Notez que vous devez compléter la partie WHERE en fonction de l'état ... réel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal