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 » ?
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>
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>
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!