我有一个 customer 表,其中包含285 407行,其中285 407 customer_id为关键字。我还有一个带有602 626行的帐户表,其中包含197 010个不同的customer_id&#39>。
我想在客户表中添加一列num_accounts,其中包含 customer 表中每个客户的帐户数量,如果他们没有'有任何。
我尝试在Update count column from data in another table中实施答案,但这需要永远运行,而我90%肯定我在加入客户和帐户。
alter table customer add num_accounts number;
update customer
set num_accounts = (select count(account_id) from account where account.customer_id = customer.customer_id group by account.customer_id)
答案 0 :(得分:0)
如果您不需要100%准确的结果,可以考虑使用物化视图:
创建物化视图customer2 as( 选择c.customed_id,count(a.account_id)cnt 来自客户c,帐户a 其中c.customer_id = a.customer_id ... c.customer_id分组 );
然后查询加入原始客户表和customed2,通过customer_id加入。 并且每天凌晨2点刷新视图。
(http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6002.htm)
另一种方法可能是在插入,删除,更新(对于每一行)之后在帐户表上添加触发器,并在该触发器的主体中执行count()和更新customer表。如果经常更改帐户表,这可能会影响性能,导入/导出后可能会导致错误的结果,因此您可能需要编写一个程序从头开始重新计算。