INSERT INTO with SubQuery MySQL
I have this Statement:
INSERT INTO qa_costpriceslog (item_code, invoice_code, item_costprice)
VALUES (1, 2, (SELECT item_costprice FROM qa_items WHERE item_code = 1));
I'm trying to insert a value copy the same data of item_costprice, but show me the error:
Error Code: 1136. Column count doesn't match value count at row 1
How i can solve this?
Solution 1:
Use numeric literals with aliases inside a SELECT
statement. No ()
are necessary around the SELECT
component.
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;
Note that in context of an INSERT INTO...SELECT
, the aliases are not actually necessary and you can just SELECT 1, 2, item_costprice
, but in a normal SELECT
you'll need the aliases to access the columns returned.
Solution 2:
You can just simply e.g.
INSERT INTO modulesToSections (fk_moduleId, fk_sectionId, `order`) VALUES
((SELECT id FROM modules WHERE title="Top bar"),0,-100);
Solution 3:
I was disappointed at the "all or nothing" answers. I needed (again) to INSERT
some data and SELECT
an id
from an existing table.
INSERT INTO table1 (id_table2, name) VALUES ((SELECT id FROM table2 LIMIT 1), 'Example');
The sub-select on an INSERT
query should use parenthesis in addition to the comma as deliminators.
For those having trouble with using a SELECT
within an INSERT
I recommend testing your SELECT
independently first and ensuring that the correct number of columns match for both queries.
Solution 4:
Your insert statement contains too many columns on the left-hand side or not enough columns on the right hand side. The part before the VALUES has 7 columns listed, but the second part after VALUES only has 3 columns returned: 1, 2, then the sub-query only returns 1 column.
EDIT: Well, it did before someone modified the query....