2012-03-04 4 views
1

마스터 및 세부 정보가 2 개인 테이블입니다. 마스터와 세부 사항 간의 일대 다 관계입니다. 다른 많은 컬럼의 사이에MySQL 업데이트 방법 많은 세부 레코드에서 1 마스터 레코드

id column (index) 
total column 

details table이있다 : 많은 다른 컬럼의 사이에

master table가있는 SQL UPDATE 문이 함께이 두 테이블을 조인 어떻게 보이는지

id column (index) 
value column 

UPDATE master.total with the sum of details.value where master.id = details.id

감사합니다. 나는이 테스트

// update all scored nominations "total score" and "average score" for current year where nomination approved and not locked 
mysql_query(' 
    UPDATE nomination_bak AS nomination 
    SET 
     nomination_score = (
      SELECT SUM(total_score) 
      FROM essayScores_bak AS essayScores 
      WHERE essayScores.nomination_sequence = nomination.nomination_sequence AND essayScores.nomination_year = nomination.nomination_year 
     ), 
     nomination_average = (
      SELECT AVG(total_score) 
      FROM essayScores_bak AS essayScores 
      WHERE essayScores.nomination_sequence = nomination.nomination_sequence AND essayScores.nomination_year = nomination.nomination_year AND essayScores.total_score > "0" 
     ) 
    WHERE nomination.nomination_year = "' . NOMINATION_YEAR . '" AND nomination.nomination_approved = "Y" AND nomination.nomination_locked = "N" 
') or die('tallyScores(nominationTable): ' . mysql_error()); 

각 테이블의 "_BAK"부분은 단지 보여줍니다

UPDATE 
master m 
INNER JOIN 
( 
    SELECT d.id, SUM(d.value) AS valueSum 
    FROM details 
    GROUP BY d.id 
) AS g 
    ON m.id = g.id 
SET m.total = g.valueSum 
여기

답변

2
update master as m 
set total= 
(select sum(value) from detail as d where d.id=m.id) 
+0

이 답변과 MGA의 차이점을 설명해 주시겠습니까? –

+0

완벽하게 작동합니다. 감사! 단순함과 이것이 처음 통과 할 때 실제로 작용했기 때문에 이것을 대답으로 보았습니다. –

+0

@ypercube 감사합니다 MGA, 그의 대답은 내 것보다 빠를 수 있습니다. Mine은 아마도 세부 테이블에 대한 쿼리를 여러 번 실행하며 내부 조인 쿼리의 세부 정보 테이블을 한 번만 사용합니다. 특히 많은 양의 데이터가있을 경우 이해하기 쉽습니다. – hago

3

뭔가 같은데 내 테이블의 백업 복사본에.

+0

감사합니다. @MGA. 지금 당장. –

+0

나는 이것을 시도했지만 전체 구문과 복잡한 기존 INNER JOIN ON 문법 (내가 알고있는 구문)의 복잡성을 감안할 때 'SQL 구문에 오류가있다. mysql 서버 버전에 해당하는 매뉴얼에서 가까운 구문을 사용할 올바른 구문을 확인하십시오. 그래서 나는 hago의 버전을 –

+0

아래에서 시험해 볼 것입니다. 나는 그것을 위해 일할 수 없었다. 사실로 인해 다른 응답으로 투표했습니다. 즉시 작동하도록했습니다. 공유해 주셔서 감사합니다. –

1

내 마지막 SELECT 문처럼 보이는 결국 무엇을 :

관련 문제