2016-10-30 1 views
-1

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

для 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

Что случилось?

+0

Это чистая тарабарщина от начала до конца. – Strawberry

+0

есть «Первичные ключи» и «Внешние ключи». Не «целые числа, указывающие на». Без четкого описания вашей схемы таблиц мы не сможем вам помочь. Является ли «отношения» таблицей соединений? Другими словами, «отношения» - это просто два столбца, где первый может быть первичным ключом таблицы таблицы для родителя, а второй - внешним ключом в таблицу лиц, указывающую ребенка? – radarbob

ответ

-1

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

update interstream.relations r 
set r.children = 
(
select SUM(id) 
from interstream.persons 
where r.ID = Parents 
group by id 
) 
0

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

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; 
+0

Спасибо большое! Это было именно то, что я искал, и это сработало! –