2010-07-14 384 views
-1
INSERT INTO 
product_search_table (id, score) 
VALUES (
SELECT product_id, 50 FROM cart_product WHERE product_id = 555 
) 

給我一個錯誤。我究竟做錯了什麼?這個查詢有什麼問題?

555將被替換爲變量。

+4

什麼錯誤? – 2010-07-14 21:29:22

+0

只爲我的靈魂安寧:這只是一個最小化的例子嗎?因爲在這種情況下子查詢是完全不必要的。 – Bobby 2010-07-15 21:14:06

+0

@Bobby我有一個包含算法搜索結果的臨時表。該算法不會檢查產品ID是否與搜索條件匹配。因此,使用上面的代碼,如果搜索查詢是產品的產品ID,它將從原始表中插入帶有產品的臨時表;具有很高的相關性得分。如果這是有道理的。 – 2010-07-16 00:22:30

回答

7

您對INSERT ... SELECT查詢使用的語法不正確。

這裏是你會怎麼做正確:

INSERT INTO product_search_table (id, score) 
SELECT product_id, 50 FROM cart_product WHERE product_id = 555 

的更多信息:MySQL 5.1 Reference: INSERT..SELECT Syntax

+0

很高興看到我們都在同一頁面上。 :) – Faisal 2010-07-14 21:31:49

5

嘗試

INSERT INTO 
product_search_table (id, score) 
SELECT product_id, 50 FROM cart_product WHERE product_id = 555 
1

括號選擇看犯罪嫌疑人 - 一樣的值。嘗試:

INSERT INTO product_search_table (id, score) 
SELECT product_id, 50 FROM cart_product WHERE product_id = 555 
1

用途:

INSERT INTO product_search_table 
(id, score) 
SELECT product_id, 50 
    FROM cart_product 
WHERE product_id = 555 

當在INSERT語句中使用SELECT語句,你不要使用VALUES關鍵字或封閉SELECT在括號中。

-1

我的猜測是,子查詢可以返回多行(理論上)。那麼多行怎麼可能適合一個領域?您可以嘗試確保查詢的數據是標量值。

(我對第二場/ 50值也不太確定)。

編輯:VALUES用於插入語句的人。請參閱this page

edit2:您只是選擇第一列的數據,第二列的數據在哪裏?

+0

VALUES有時用於INSERT,但在這種情況下不適用。 – 2010-07-14 21:36:15

1

你不能用VALUES做到這一點。

例如:

INSERT INTO 
product_search_table (id, score) 
SELECT product_id,50 FROM cart_product WHERE product_id = 555