2013-08-30 2 views
0

의 행동에 의해 DISTINCT/GROUP을 얻을 수 있습니다 : 오류 번호 : 1242하위 쿼리는 1 개 이상의 행을
어떻게 내가 오류를 얻을 UPDATE 질의

을 반환하기 때문에 내 UPDATE의 하위 쿼리 생산 반복 값. 나는 과 GROUP BYSELECT 쿼리에서 반복 값을 제거 할 수 있음을 알고 있습니다. UPDATE 쿼리에서 어떻게 해결할 수 있습니까? 내가 SELECT 쿼리

SELECT 
S.* 
FROM 
product_stock AS S 
LEFT JOIN 
product_purchase_item AS I 
ON 
S.product_id=I.product_id AND S.product_size=I.product_size 
LEFT JOIN 
product_purchases AS P 
ON 
I.product_purchase_item_id=P.product_purchase_item_id 

쿼리 반환

 
product_stock_id product_id product_size product_quantity 

10     216   1   1 
10     216   1   1 
11     216   5   1 

에 변환하지만 그냥 DISTINCT 키워드가 SELECT에서이 작업을 수행 할 수 있습니다 (필요한 경우 내 쿼리는 다음

UPDATE 
    product_stock AS S 
LEFT JOIN 
    product_purchase_item AS I 
ON 
    S.product_id=I.product_id AND S.product_size=I.product_size 
LEFT JOIN 
    product_purchases AS P 
ON 
    I.product_purchase_item_id=P.product_purchase_item_id 
SET 
    S.product_size_quantity=S.product_size_quantity+I.quantity 
WHERE 
    S.product_id=? 
AND 
    S.product_size=? 

한다고 가정이다 검색어)

 
product_stock_id product_id product_size product_quantity 

10     216   1   1 
11     216   5   1 

그러나 내 UPDATE 하위 쿼리에서 위의 데이터 (고유 값)를 검색하는 방법은 무엇입니까? 내 UPDATE 검색어에 DISTINCT 키워드를 사용하거나 다른 것을 사용할 수 있습니까? 데이터가 진정으로 동일한 경우

답변

0

별개의/그룹화하지 않고 "min()"을 사용할 수 있습니다. 검색어에 중복되는 것으로 보이는 product_purchases 테이블이 포함될 이유가 있었습니까?

UPDATE product_stock SET product_size_quantity = product_size_quantity + I.quantity 

from product_stock 
INNER JOIN (select product_id, product_size, sum(quantity) from product_purchase_item group by product_id, product_size) AS I 
ON product_stock.product_id=I.product_id AND product_stock.product_size=I.product_size 

WHERE product_stock.product_id=? 
AND product_stock.product_size=? 
+0

예, 'AFTER INSERT ON' product_purchases'trigger'를 사용하고 있습니다. 그래서 product_purchases 테이블이 필요합니다. 여기 내 [change_stock_when_purchases TRIGGER] (http://pastebin.com/tcANMhen). 나는 여기서 GROUP BY를 간접적으로 사용한다. 하지만 같은 오류를 보여줍니다 – Imran

0

, 당신은 단순히이 트릭을 할해야

UPDATE 
    product_stock AS S 
LEFT JOIN 
    product_purchase_item AS I 
ON 
    S.product_id=I.product_id AND S.product_size=I.product_size 
LEFT JOIN 
    product_purchases AS P 
ON 
    I.product_purchase_item_id=P.product_purchase_item_id 
SET 
    -- CHANGE HERE ===============================> 
    S.product_size_quantity=S.product_size_quantity+MIN(I.quantity) 
WHERE 
    S.product_id=? 
AND 
    S.product_size=? 
+0

같은 문제. MIN()을 사용하는 이유를 이해할 수 없습니다. 'SET' 이전에 발견 된 문제 일 수 있습니다. 여기에 이미 반복 값이 있기 때문입니다. – Imran

관련 문제