迭代一个表来更新sql

时间:2015-12-29 18:19:40

标签: sql performance postgresql count

我使用Postgresql,使用计数成本很高。我想要做的是计算另一个表中的一个表ID并更新计数。 让我们说第一个表是类别

ID

名称

num_count

其他表是餐厅

ID

名称

CATEGORY_ID

我想根据Restaurants.category_id的计数值更新categories.num_count。 我可以这样做 Update Categories set Categories.num_count = (select count(*) from Restaurants where Restaurants.category_id = Categories.id) 但是花了太多时间。我尝试做一些事情,例如迭代餐馆1次并更新Categories.num_count ++,但我无法做到正确,因为它使每个类别num_count 1.它在1次执行后停止工作。

使用sql有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

update categories c
set num_count = r.num_count
from (
    select category_id, count(*) as num_count
    from restaurants
    group by category_id
) r
where c.id = r.category_id

答案 1 :(得分:1)

怎么样:

with countPerCategory (categoryId, numCount) as
{
  select category_id, count(*) from Restaurants
  group by category_id
}
update Categories set num_count = countPerCategory.numCount
from countPerCategory
where Categories.id = countPerCategory.categoryId;
PS:我发现这是不必要的事情。每当添加或删除餐馆时,您都需要更新num_count。