Возможно, вы получили эту ошибку, верно?
ERROR 1093 (HY000): You can't specify target table 'table_name' for update in FROM clause
Самый простой способ обойти это, вероятно, выбрать число дочерних элементов во временную таблицу, а затем присоединиться к этой таблице для обновлений.1005 * Это должно сработать, если предположить, что глубина отношения родитель / потомок всегда равна 1. На основании вашего исходного обновления это кажется безопасным предположением.
Я добавил явную блокировку записи в таблицу, чтобы убедиться,строки меняются после того, как я создаю временную таблицу.Это следует делать только в том случае, если вы можете позволить себе заблокировать его на время этого обновления, которое будет зависеть от объема данных.
lock tables table_name write;
create temporary table temp_child_counts as
select parent_id, count(*) as child_count
from table_name
group by parent_id;
alter table temp_child_counts add unique key (parent_id);
update table_name
inner join temp_child_counts on temp_child_counts.parent_id = table_name.id
set table_name.child_count = temp_child_counts.child_count;
unlock tables;