Heim >Datenbank >MySQL-Tutorial >Warum gibt meine MySQL-INSERT-SELECT-Abfrage „Operand sollte 1 Spalte(n) enthalten' zurück?
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!