我尝试使用以下请求将值插入表中:
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
答案 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;