Heim >Datenbank >MySQL-Tutorial >Wie löst man den MySQL-Fehler 1093: „Sie können in der FROM-Klausel keine Zieltabelle für die Aktualisierung angeben'?

Wie löst man den MySQL-Fehler 1093: „Sie können in der FROM-Klausel keine Zieltabelle für die Aktualisierung angeben'?

DDD
DDDOriginal
2025-01-22 19:42:10200Durchsuche

How to Solve MySQL Error 1093:

MySQL-Fehler 1093: Abfragelimit aktualisieren

Frage:

Beim Versuch, die pers-Tabelle mithilfe einer Unterabfrage zu aktualisieren, erhalte ich die Fehlermeldung „Sie können in der FROM-Klausel keine Zieltabelle für die Aktualisierung angeben“ (Fehler 1093).

Abfrage:

<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>

Verbesserte Lösung (klareres Beispiel):

Um die Lösung deutlicher zu veranschaulichen, kann anstelle einer Unterabfrage eine JOIN-Anweisung verwendet werden:

<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>

Diese Methode vermeidet den direkten Verweis auf die pers-Tabelle in der Unterabfrage und umgeht so MySQL-Einschränkungen. subquery Fungiert als temporäre Tabelle und ermöglicht sichere Aktualisierungsvorgänge. Beachten Sie, dass Sie den Teil WHERE basierend auf dem tatsächlichen Zustand ... ergänzen müssen.

Das obige ist der detaillierte Inhalt vonWie löst man den MySQL-Fehler 1093: „Sie können in der FROM-Klausel keine Zieltabelle für die Aktualisierung angeben'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn