2013-12-18 2 views
0

나는 다음과 같은 요청을 사용하여 테이블에 값을 삽입하려고 작동하지 않습니다사용 VAR는

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가 다르지만 insert 후 product_id 열에 하나의 값만 있습니다. 이것은 ON DUPLICATE KEY UPDATE product_id = prd.entity_id 대신 요청을 완벽하게 사용하면 var @massimport_product_id의 원인으로 생각됩니다.

하지만 다른 모든 경우에 잘 작동하는 자동 생성 요청이므로 누군가에게이 이유를 설명 할 수 있기를 바랍니다.

Thx

답변

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이 쿼리에 가입 항상 INSERT, 그래서 이미 itemmaster 테이블에 존재 기록 (SKU 컬럼의 값을) 반환 이 경우에는 다중 사용 가능 업데이트를 사용하여 더 간단하게 수행 할 수 있습니다.

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

관련 문제