MySQL, как ОБНОВИТЬ 1 основную запись из многих подробных записей - PullRequest
1 голос
/ 04 марта 2012

У меня есть 2 таблицы - мастер и детали.Это отношение «один ко многим» между мастером и деталями.

Среди многих других столбцов master table имеет:

id column (index)
total column

Среди многих других столбцов details table имеет:

id column (index)
value column

Как может выглядеть оператор SQL UPDATE для объединения этих двух таблиц и UPDATE master.total with the sum of details.value where master.id = details.id

Спасибо за помощь.

Ответы [ 3 ]

3 голосов
/ 04 марта 2012
update master as m 
set total=
(select sum(value) from detail as d where d.id=m.id)
3 голосов
/ 04 марта 2012

выглядит примерно так:

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
1 голос
/ 04 марта 2012

Вот как в итоге выглядел мой последний оператор SELECT:

// 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" каждой таблицы просто показывает, что я проверял это на резервной копии своих таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...