2011-04-12 3 views
2
SELECT quotes.qid, SUM(qitems.net_cost_ext) 
FROM quotes, qitems 
WHERE quotes.qid = qitems.qid 
GROUP BY qitems.qid; 

UPDATE quotes, qitems 
SET quotes.net_cost_total = SUM(qitems.net_cost_ext) 
WHERE quotes.qid = qitems.qid 
GROUP BY qitems.qid; 

위의 select 문은 각 견적의 모든 제품에 대한 순 비용을 요약하고 견적 번호별로 합계를 표시합니다.select 문을 update 문으로 변환하는 방법은 무엇입니까?

quotes 테이블에 net_cost_total 필드를 추가했습니다. 각 견적에서 net_cost 합계로 모든 견적을 업데이트하고 싶습니다. 쿼리가 실패하면 GROUP 구문이 잘못되었다고 말하면서 어떻게해야하는지 모르겠습니다.

답변

5

보십시오이 하나

UPDATE quotes AS q 
     JOIN (SELECT quotes.qid, 
         SUM(qitems.net_cost_ext) AS SUM 
        FROM quotes, 
         qitems 
        WHERE quotes.qid = qitems.qid 
        GROUP BY qitems.qid) AS d 
     ON d.qid = q.qid 
SET q.net_cost_total = d.SUM 
+0

이 솔루션의 작품을 큰. 내가 조인을 할 수 있는지 몰랐는데 ... 난 항상 간단한 테이블 조인을 위해 그들을 사용했습니다. 조인 문의 select 문을 기반으로 qitems 테이블의 사용자 지정 버전을 만드는 것을 올바르게 이해 한 경우 ... – payling

+0

선택에서 파생 테이블이라고합니다. 그() 실제로 가상 테이블을 묶습니다. – Pentium10

1

시도 :

UPDATE quotes 
INNER JOIN (
    SELECT SUM(qitems.net_cost_ext) AS s 
    FROM qitems 
    GROUP BY qitems.qid 
) q USING(qid) 
SET net_cost_total = q.s 

표준 SQL 사용

0

(마지막 MySQL의 코멘트 here에서 영감) :

UPDATE quotes 
    SET net_cost_total = (
         SELECT SUM(net_cost_ext) 
          FROM qitems 
          WHERE quotes.qid = qitems.qid 
         ) 
WHERE EXISTS (
       SELECT * 
       FROM qitems 
       WHERE quotes.qid = qitems.qid 
      ); 
관련 문제