2012-10-20 53 views
0

我需要幫助更新表中的餘額列。使用更新命令從兩個表更新餘額的SQL

平衡柱中存在的customer_master

customer_master> custcode,平衡

它需要在兩個表中

值的基礎上被更新預訂> custcode,預訂金額

應收賬款> cu stcode,amountrecd

用於customercode,平衡是bookingamount - amountrecd

的命令是在MySQL和PostgreSQL得到應用。

它可以針對單個客戶(例如custcode ='A1234XXXXX'),也可以應用於customer_master中的所有客戶。

我試着谷歌'從兩個表更新餘額',但沒有運氣到目前爲止。

感謝

回答

1

我採取的是類的(可能)過頂帶和吊帶

UPDATE customer_master a 
     LEFT JOIN (select custcode, sum(COALESCE(bookingamount, 0)) AS bookingamount 
        from bookings group by custcode) b 
      ON a.custcode = b.custcode 
     LEFT JOIN (select custcode, sum(COALESCE(amountrecd, 0)) AS amountrecd 
        from receivables group by custcode) c 
      ON a.custcode = c.custcode 
SET  
     a.balance = COALESCE(b.bookingamount, 0) - COALESCE(c.amountrecd, 0) 
-- WHERE a.custcode = 'A1234XXXXX' 
+0

感謝和任何優化建議,需要一段時間來更新 – arvind

+1

索引將成爲您在custcode上的朋友CustCode上的索引和預訂和custocode上的索引以及應收賬款的預訂金額。這將使dube查詢速度非常快,然後您可以選擇在主設備上創建索引。我會保持完整。 –

2

對於MySQL,你可以加入多個表,即使它是一個UPDATE聲明。我使用LEFT JOIN,因爲有可能custcodereceivables表中沒有記錄。

UPDATE customer_master a 
     LEFT JOIN bookings b 
      ON a.custcode = b.custcode 
     LEFT JOIN receivables c 
      ON a.custcode = c.costcode 
SET  a.balance = COALESCE(b.bookingamount, 0) - COALESCE(c.amountrecd, 0) 
-- WHERE a.custcode = 'A1234XXXXX' 

後續問題:可以custcode包含bookingsreceivables多條記錄?如果是這樣,我會更新答案。

+1

+1左加入!我還會根據cust碼對孩子進行分組和總結,以處理子表中存在多個金額的情況 –

+1

@PreetSangha我同意這就是爲什麼我詢問OP是否有可能包含多個記錄一個'custcode'。 hehe –

+1

確實如此 - 但這樣做更安全,更通用。 –