mysql обновление присоединиться

Для сайта родословной я ищу решение для следующих: есть 2 таблицы, люди и отношения. Люди могут иметь несколько отношений, но иметь только одно отношение как их родители. У людей есть целое число, указывающее на отношение их родителей, а отношения имеют два целых числа, указывающих на людей, которые формируют отношение. При подсчете того, у кого больше всего детей, мне нужно сначала рассчитать количество детей в одном отношении.

MySQL, который я использовал:

UPDATE relations r
INNER JOIN persons p
ON r.ID = p.Parents
SET Children = SUM(p)
GROUP BY p;

Но это приводит к: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с 'GROUP BY p' в строке 5

В чем дело?

2 ответа

Вы не можете выполнить такую ​​агрегацию в запросе. Вы можете сделать это в подзапросе:

UPDATE relations r INNER JOIN
       (SELECT p.Parents, SUM(p.p) as sump -- Should this really be COUNT(*)?
        FROM persons p
        GROUP BY p.Parents
       ) p
       ON r.ID = p.Parents
    SET r.Children = sump;

Один из способов сделать это:

update interstream.relations r
set r.children = 
(
select SUM(id)
from interstream.persons
where r.ID = Parents
group by id
)
Другие вопросы по тегам