将var用于插入更新请求不起作用

时间:2013-12-18 14:06:14

标签: mysql variables sql-insert

我尝试使用以下请求将值插入表中:

INSERT IGNORE itemmaster
(
SKU,
product_id
)
SELECT
@massimport_SKU := main.SKU,
@massimport_product_id := prd.entity_id
FROM itemmaster AS main
INNER JOIN product_entity AS prd ON prd.sku = main.SKU
ON DUPLICATE KEY UPDATE product_id = @massimport_product_id

SKU是一把独特的钥匙。 问题是product_id的值始终是相同的id。如果我只执行select,则product_id不同但在插入后,product_id列中只有一个值。我认为这是var @massimport_product_id的问题,如果我使用ON DUPLICATE KEY UPDATE product_id = prd.entity_id而不是请求完美地工作。

但是因为它是一个自动生成的请求,在其他所有情况下都能很好地工作,我希望有人能够解释为什么会这样做。

THX

1 个答案:

答案 0 :(得分:1)

不要使用无效的会话变量
使用它:

INSERT IGNORE itemmaster( SKU, product_id )
SELECT main.SKU, prd.entity_id
FROM itemmaster AS main
INNER JOIN product_entity AS prd ON prd.sku = main.SKU
ON DUPLICATE KEY UPDATE product_id = prd.entity_id
;

演示 - > http://www.sqlfiddle.com/#!2/592187/1

然而,此查询中的INNER JOIN始终返回itemmaster表中已存在的记录(SKU列的值),因此在这种情况下INSERT是useles,使用多表更新可以更简单地完成相同操作:

UPDATE itemmaster main
JOIN product_entity AS prd ON prd.sku = main.SKU
SET main.product_id = prd.entity_id;

演示:http://www.sqlfiddle.com/#!2/762eb4/1