Ich habe diese Erklärung:
INSERT INTO qa_costpriceslog (item_code, invoice_code, item_costprice)
VALUES (1, 2, (SELECT item_costprice FROM qa_items WHERE item_code = 1));
Ich versuche einen Wert einzufügen, kopiere die gleichen Daten von item_costprice, zeige aber den Fehler:
Error Code: 1136. Column count doesn't match value count at row 1
Wie kann ich das lösen?
Verwenden Sie numerische Literale mit Aliasnamen in einer SELECT
-Anweisung. Um die Komponente SELECT
sind keine ()
-Werte erforderlich.
INSERT INTO qa_costpriceslog (item_code, invoice_code, item_costprice)
SELECT
/* Literal number values with column aliases */
1 AS item_code,
2 AS invoice_code,
item_costprice
FROM qa_items
WHERE item_code = 1;
Beachten Sie, dass die Aliase im Kontext eines INSERT INTO...SELECT
nicht unbedingt erforderlich sind und Sie können einfach SELECT 1, 2, item_costprice
, aber in einer normalen SELECT
benötigen Sie die Aliase, um auf die zurückgegebenen Spalten zuzugreifen.
Sie können einfach nur z.
INSERT INTO modulesToSections (fk_moduleId, fk_sectionId, `order`) VALUES
((SELECT id FROM modules WHERE title="Top bar"),0,-100);
Ihre Einfügeanweisung enthält zu viele Spalten auf der linken Seite oder nicht genügend Spalten auf der rechten Seite. Der Teil vor den VALUES enthält 7 Spalten, aber der zweite Teil nach VALUES hat nur 3 zurückgegebene Spalten: 1, 2, dann gibt die Unterabfrage nur 1 Spalte zurück.
BEARBEITEN: Nun, vor einer Änderung der Abfrage ...
Ich war enttäuscht über die Antworten "alles oder nichts". Ich brauchte (wieder) einige Daten und INSERT
und SELECT
eine id
aus einer vorhandenen Tabelle.
INSERT INTO table1 (id_table2, name) VALUES ((SELECT id FROM table2 LIMIT 1), 'Example');
Die Unterauswahl für eine INSERT
-Abfrage sollte zusätzlich zum Komma als Trennzeichen Klammern verwenden.
Für Benutzer, die Probleme mit der Verwendung eines SELECT
innerhalb eines INSERT
haben, empfehle ich zuerst, Ihren SELECT
unabhängig voneinander zu testen und sicherzustellen, dass die korrekte Anzahl der Spalten für beide Abfragen übereinstimmt.