MySQL: считать записи из одной таблицы, а затем обновлять другую - PullRequest
27 голосов
/ 01 августа 2009

Получил 2 таблицы / сущности, очень простой сценарий.

Таблица поэты - Столбцы: ид, поэт, нация

Таблица нации - Столбцы: id, нация, количество

В основном, нации до поэтов имеют отображение один ко многим, естественно. Например, 1000 поэтов из 60 стран. Каждый поэт в поэтах назначается нации по полю нации, которое содержит идентификатор одной из наций наций .

Поле подсчета наций содержит количество поэтов в поэтах из этой нации.

У меня вопрос, как использовать только один SQL-запрос для подсчета количества поэтов по нации в poets и затем обновить соответствующий счетчик этой нации?

Я пытался:

UPDATE poets, nations SET nations.count = COUNT(poets.id) GROUP BY poets.nation HAVING poets.nation = nations.id

Но это дает ошибку # 1064. Также пытался объединить предложение WHERE где-нибудь, но оно все равно отказывается работать.

Есть идеи?

Ответы [ 2 ]

38 голосов
/ 01 августа 2009

Использовать подзапрос:

UPDATE nations 
   SET count = (
       SELECT COUNT(id) 
         FROM poets 
        WHERE poets.nation = nations.id 
        GROUP BY id
       );
22 голосов
/ 04 августа 2011

Вам просто не нужна GROUP BY, ср.:

UPDATE nations SET count = (
  SELECT COUNT(id) FROM poets 
    WHERE poets.nation = nations.id);

Вернее, с GROUP BY подзапрос вернет NULL для стран, в которых нет поэтов. Без GROUP BY подзапрос вернет 0 в этом случае.

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