than - mysql subselect multiple columns




INSERT INTO mit SubQuery MySQL (3)

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?


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.


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.





subquery