2012-05-17 328 views
38

我有這樣的說法:INSERT INTO與子查詢的MySQL

INSERT INTO qa_costpriceslog (item_code, invoice_code, item_costprice) 
    VALUES (1, 2, (SELECT item_costprice FROM qa_items WHERE item_code = 1)); 

我試圖插入值複製item_costprice的數據相同,但給我的錯誤:

Error Code: 1136. Column count doesn't match value count at row 1 

我如何可以解決這個?

回答

61

使用數字文字與SELECT語句中的別名。在SELECT組件周圍不需要()

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; 

注意,在INSERT INTO...SELECT的背景下,別名不是確有必要,你可以直接SELECT 1, 2, item_costprice,但在正常SELECT你需要的別名來訪問返回的列。

+0

哇,真是太感謝您是我需要的+ REP :) –

3

INSERT語句中包含右手側的左側列太多或沒有足夠的列。 VALUES之前的部分列出了7列,但VALUES之後的第二部分僅返回了3列:1,2,則子查詢只返回1列。

編輯:嗯,這的確有人修改查詢之前....

+2

這實際上是問題的一個很好的解釋。 – mizuti

4

你可以簡單地如

INSERT INTO modulesToSections (fk_moduleId, fk_sectionId, `order`) VALUES 
    ((SELECT id FROM modules WHERE title="Top bar"),0,-100); 
+0

查詢錯誤(1242):子查詢返回多於1行' - >語法正確,但這僅適用於單行。 – stamster