Подтвердить что ты не робот

MySQL: подсчитывает записи из одной таблицы, а затем обновляет другую

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

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

Таблица нации - Столбцы: id, country, count

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

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

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

Я пробовал:

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

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

Любая идея?

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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