Ответ 1
Использовать подзапрос:
UPDATE nations
SET count = (
SELECT COUNT(id)
FROM poets
WHERE poets.nation = nations.id
GROUP BY id
);
Получите 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 где-то, но он все еще отказывается работать.
Любая идея?
Использовать подзапрос:
UPDATE nations
SET count = (
SELECT COUNT(id)
FROM poets
WHERE poets.nation = nations.id
GROUP BY id
);
Вам просто не нужна GROUP BY, cf.:
UPDATE nations SET count = (
SELECT COUNT(id) FROM poets
WHERE poets.nation = nations.id);
Или, вернее, с GROUP BY, подзапрос вернет NULL для стран, у которых нет поэтов. Без GROUP BY подзапрос в этом случае возвращает 0.