MySQL обновление таблицы из другой таблицы - PullRequest
2 голосов
/ 18 июня 2010

Я пытаюсь обновить поле в одной таблице из суммы другого поля в другой таблице.

company_tbl (PRIMARY, companySize, companyName) location_tbl (PRIMARY, companyID, locationSize, locationName)

Ссылка на две таблицы: company_tbl.PRIMARY = location_tbl.companyID

update company_tbl comp, location_tbl loc
set companySize = sum(locationSize)
where comp.PRIMARY = loc.companyID

Я получаю сообщение об ошибке «недопустимое использование групповой функции»

Компания может иметь несколько местоположений

Возможно ли то, что я хочу сделать? Я хочу взять сумму местоположений, принадлежащих конкретной компании, и обновить размер компании с помощью суммы.

Спасибо!

Ответы [ 2 ]

9 голосов
/ 18 июня 2010

Использование:

UPDATE company_tbl comp
   SET companySize = (SELECT SUM(lt.locationSize)
                        FROM location_tbl lt
                       WHERE lt.companyid = comp.primary)

... или вы можете использовать представление , содержащее:

   SELECT c.primary,
          COALESCE(SUM(lt.locationsize), 0) AS companysize
     FROM company_tbl c
LEFT JOIN location_tbl lt ON lt.companyid = c.primary
2 голосов
/ 18 июня 2010

Сначала инициализируйте companySize до нуля:

UPDATE company_tbl SET companySize = 0; 

Затем для каждой подходящей строки местоположения добавьте locationSize:

UPDATE company_tbl comp JOIN location_tbl loc ON comp.PRIMARY = loc.companyID
SET comp.companySize = comp.companySize + loc.locationSize;

Вы получаете желаемую сумму к тому времени, как она обработала все подходящие местоположения для каждой компании.

...