Heim >Datenbank >MySQL-Tutorial >Warum gibt meine MySQL-INSERT-SELECT-Abfrage „Operand sollte 1 Spalte(n) enthalten' zurück?

Warum gibt meine MySQL-INSERT-SELECT-Abfrage „Operand sollte 1 Spalte(n) enthalten' zurück?

Susan Sarandon
Susan SarandonOriginal
2024-12-20 08:43:10142Durchsuche

Why Does My MySQL INSERT-SELECT Query Return

MySQL-Syntaxfehler: „Operand sollte 1 Spalte(n) enthalten“ in einer INSERT-SELECT-Abfrage

Beim Ausführen eines INSERT-SELECT Wenn Sie eine Abfrage ausführen, gibt MySQL möglicherweise einen Fehler aus, der besagt: „Operand sollte 1 Spalte(n) enthalten“. Um dieses Problem zu beheben, beachten Sie Folgendes:

Syntax

Die korrekte Syntax für eine INSERT-SELECT-Abfrage lautet:

INSERT INTO DestinationTable (DestinationColumns)
SELECT SelectColumns
FROM SourceTable
WHERE Conditions;

In der bereitgestellte Abfrage:

INSERT INTO VOUCHER (VOUCHER_NUMBER, BOOK_ID, DENOMINATION)
SELECT (a.number, b.ID, b.DENOMINATION) 
FROM temp_cheques a, BOOK b
WHERE a.number BETWEEN b.START_NUMBER AND b.START_NUMBER+b.UNITS-1;

Die Angaben in der SELECT-Klausel sind falsch. Entfernen Sie sie und erhalten Sie Folgendes:

INSERT INTO VOUCHER (VOUCHER_NUMBER, BOOK_ID, DENOMINATION)
SELECT a.number, b.ID, b.DENOMINATION 
FROM temp_cheques a, BOOK b
WHERE a.number BETWEEN b.START_NUMBER AND b.START_NUMBER+b.UNITS-1;

Datengröße

Wenn der Fehler nach der Korrektur der Syntax weiterhin besteht, berücksichtigen Sie die Größe der an der Abfrage beteiligten Daten. MySQL begrenzt die Anzahl der Zeilen, die von einer SELECT-Anweisung zurückgegeben werden können (MAX_JOIN_SIZE). Um diesen Fehler bei großen Datensätzen zu vermeiden, führen Sie Folgendes aus:

SET SQL_BIG_SELECTS = 1;

bevor Sie die Abfrage ausführen. Dadurch wird das Limit erhöht und die Abfrage kann erfolgreich ausgeführt werden.

Beispiel

Mit der korrigierten Syntax und der Einstellung SQL_BIG_SELECTS wird die geänderte Abfrage zu:

SET SQL_BIG_SELECTS = 1;

INSERT INTO VOUCHER (VOUCHER_NUMBER, BOOK_ID, DENOMINATION)
SELECT a.number, b.ID, b.DENOMINATION 
FROM temp_cheques a, BOOK b
WHERE a.number BETWEEN b.START_NUMBER AND b.START_NUMBER+b.UNITS-1;

Führen Sie diese Abfrage aus, um die Daten aus temp_cheques in die VOUCHER-Tabelle einzufügen.

Das obige ist der detaillierte Inhalt vonWarum gibt meine MySQL-INSERT-SELECT-Abfrage „Operand sollte 1 Spalte(n) enthalten' zurück?. 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