2010-07-14 136 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