Heim > Datenbank > MySQL-Tutorial > Warum kann ich eine MySQL-Tabelle nicht mithilfe einer Unterabfrage aktualisieren, die in der FROM-Klausel auf dieselbe Tabelle verweist?

Warum kann ich eine MySQL-Tabelle nicht mithilfe einer Unterabfrage aktualisieren, die in der FROM-Klausel auf dieselbe Tabelle verweist?

Patricia Arquette
Freigeben: 2025-01-22 19:47:13
Original
470 Leute haben es durchsucht

Why Can't I Update a MySQL Table Using a Subquery Referencing the Same Table in the FROM Clause?

Das Problem, dass die FROM-Klausel in der MySQL UPDATE-Anweisung auf dieselbe Tabelle verweist

Szene:

Stellen Sie sich eine MySQL-Tabelle mit dem Namen pers vor:

<code class="language-sql">CREATE TABLE IF NOT EXISTS `pers` (
  `persID` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(35) NOT NULL,
  `gehalt` int(11) NOT NULL,
  `chefID` int(11) DEFAULT NULL,
  PRIMARY KEY (`persID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

INSERT INTO `pers` (`persID`, `name`, `gehalt`, `chefID`) VALUES
(1, 'blb', 1000, 3),
(2, 'as', 1000, 3),
(3, 'chef', 1040, NULL);</code>
Nach dem Login kopieren

Frage:

Der Versuch, die folgende UPDATE-Anweisung auszuführen, führt zu Fehler 1093:

<code class="language-sql">UPDATE pers P 
SET P.gehalt = P.gehalt * 1.05 
WHERE (P.chefID IS NOT NULL 
OR gehalt < 1000);</code>
Nach dem Login kopieren

Grund:

Dieser Fehler tritt auf, weil MySQL in UPDATE/INSERT/DELETE-Abfragen keinen Verweis auf die Zieltabelle aus einer Unterabfrage zulässt.

Lösung:

Um dieses Problem zu lösen, muss die Unterabfrage neu geschrieben werden, um die erforderlichen Felder in der Zieltabelle explizit in die temporäre Tabelle zu kopieren. Dies kann erreicht werden, indem die Instanz der Zieltabelle durch (SELECT * FROM target_table) ersetzt wird. Die Unterabfrage wird in diesem Beispiel jedoch nicht benötigt und kann direkt geändert werden.

Richtige Abfrage:

<code class="language-sql">UPDATE pers P 
SET P.gehalt = P.gehalt * 1.05 
WHERE (P.chefID IS NOT NULL 
OR P.gehalt < 1000);</code>
Nach dem Login kopieren

Diese modifizierte Abfrage verwendet WHERE direkt in der P.gehalt-Klausel, um MySQL-Einschränkungen zu vermeiden und somit die pers-Tabelle korrekt zu aktualisieren. Es müssen keine temporären Tabellen erstellt werden.

Das obige ist der detaillierte Inhalt vonWarum kann ich eine MySQL-Tabelle nicht mithilfe einer Unterabfrage aktualisieren, die in der FROM-Klausel auf dieselbe Tabelle verweist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage