than - mysql subselect multiple columns
INSERT INTO mit SubQuery MySQL (3)
Ich war enttäuscht über die Antworten "alles oder nichts". Ich musste (wieder) einige Daten SELECT
und eine id
aus einer vorhandenen Tabelle SELECT
.
INSERT INTO table1 (id_table2, name) VALUES ((SELECT id FROM table2 LIMIT 1), 'Example');
Die Unterauswahl für eine INSERT
Abfrage sollte zusätzlich zu den Kommas als Deliminatoren Klammern verwenden.
Für Benutzer, die Probleme mit der Verwendung von SELECT
in einem INSERT
empfehle ich, SELECT
zuerst unabhängig zu testen und sicherzustellen, dass die korrekte Anzahl von Spalten für beide Abfragen übereinstimmt.
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 mir aber den Fehler:
Error Code: 1136. Column count doesn't match value count at row 1
Wie kann ich das lösen?
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.
EDIT: Nun, bevor jemand die Abfrage modifizierte ...
Verwenden Sie numerische Literale mit Aliasnamen in einer SELECT
Anweisung. Nein ()
ist um die SELECT
Komponente 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 von INSERT INTO...SELECT
nicht unbedingt erforderlich sind. Sie können einfach SELECT 1, 2, item_costprice
. In einem normalen SELECT
benötigen Sie die Aliase, um auf die zurückgegebenen Spalten zuzugreifen.