Es gibt eine Reihe von Fehlern, die sich nur auf Unterabfragen beziehen. Sie werden in diesem Abschnitt beschrieben.
Falsche Anzahl von Spalten aus der Unterabfrage:
ERROR 1241 (ER_OPERAND_COL) SQLSTATE = 21000 Message = "Operand should contain 1 column(s)"
Dieser Fehler tritt in Fällen wie dem folgenden auf:
SELECT (SELECT column1, column2 FROM t2) FROM t1;
Sie können eine Unterabfrage verwenden, die mehrere Spalten zurückgibt, sofern das Ziel ein Vergleich ist. Siehe auch Abschnitt 13.2.8.5, „Zeilenunterabfragen“. Allerdings muss die Unterabfrage in anderen Kontexten ein skalarer Operand sein.
Falsche Anzahl von Datensätzen aus der Unterabfrage:
ERROR 1242 (ER_SUBSELECT_NO_1_ROW) SQLSTATE = 21000 Message = "Subquery returns more than 1 row"
Dieser Fehler tritt bei Anweisungen auf, bei denen die Unterabfrage mehr als einen Datensatz zurückgibt. Betrachten Sie einmal das folgende Beispiel:
SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
Wenn SELECT column1 FROM t2
nur einen
Datensatz zurückgibt, funktioniert obige Abfrage. Gibt
die Abfrage jedoch mehrere Datensätze zurück, dann tritt
der Fehler 1242 auf. In diesem Fall sollten Sie die
Abfrage wie folgt neu formulieren:
SELECT * FROM t1 WHERE column1 = ANY (SELECT column1 FROM t2);
Falsch verwendete Tabelle in der Unterabfrage:
Error 1093 (ER_UPDATE_TABLE_USED) SQLSTATE = HY000 Message = "You can't specify target table 'x' for update in FROM clause"
Dieser Fehler tritt in Fällen wie dem folgenden auf:
UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);
Sie können eine Unterabfrage zur Zuweisung innerhalb
einer UPDATE
-Anweisung verwenden, da
Unterabfragen in UPDATE
- und
DELETE
-Anweisungen ebenso zulässig
sind wie in SELECT
-Anweisungen.
Allerdings können Sie nicht dieselbe Tabelle (in diesem
Fall Tabelle t1
) sowohl in der
FROM
-Klausel der Unterabfrage als auch
als Aktualisierungsziel angeben.
Bei transaktionssicheren Speicher-Engines schlägt bei einem Fehlschlag einer Unterabfrage die gesamte Anweisung fehl. Bei nichttransaktionssicheren Speicher-Engines bleiben Datenänderungen, die vor Auftreten des Fehlers durchgeführt wurden, erhalten.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.