마스터 및 세부 정보가 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
여기
이 답변과 MGA의 차이점을 설명해 주시겠습니까? –
완벽하게 작동합니다. 감사! 단순함과 이것이 처음 통과 할 때 실제로 작용했기 때문에 이것을 대답으로 보았습니다. –
@ypercube 감사합니다 MGA, 그의 대답은 내 것보다 빠를 수 있습니다. Mine은 아마도 세부 테이블에 대한 쿼리를 여러 번 실행하며 내부 조인 쿼리의 세부 정보 테이블을 한 번만 사용합니다. 특히 많은 양의 데이터가있을 경우 이해하기 쉽습니다. – hago