簡體   English   中英

sql將字段添加到表中,並用另一個表中的計數值更新它

[英]sql adding a field to a table and updating it with count values from another table

我有一個包含285407行的客戶表,其中285407客戶的ID為鍵。 我還有一個具有602626行的帳戶表,其中包含197010個不同的customer_id。

我想在客戶表num_accounts上添加一列,該列將保存客戶表中每個客戶擁有的帳戶數,如果他們沒有賬戶,則為null。

我嘗試在以下方法中實現答案: 從另一個表中的數據更新計數列,但是這需要永遠的時間才能運行,而且我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)

如果不需要100%准確的結果,可以考慮使用實例化視圖:

創建實例化視圖customer2為(從客戶c選擇c.customed_id,count(a.account_id)cnt,帳戶a其中c.customer_id = a.customer_id ...按c.customer_id分組);

然后查詢通過customer_id加入原始客戶表和customed2。 每天晚上2點刷新視圖。

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_6002.htm

另一種方法可能是在插入,刪除,更新(針對每一行)並在該觸發器主體中對客戶表進行count()和更新之后,在您的帳戶表上添加觸發器。 如果您經常更改帳戶表,這可能會影響性能,並且在導入/導出后可能導致不正確的結果,因此您可能需要編寫一個過程以從頭開始重新計算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM