2010-06-18 158 views
2

我試圖從另一個表中的另一個字段的總和更新一個表中的一個字段。mysql從另一個表更新表

company_tbl(PRIMARY,companySize,公司名稱) location_tbl(PRIMARY,companyID,locationSize,LOCATIONNAME)

兩個表由company_tbl.PRIMARY = location_tbl.companyID

update company_tbl comp, location_tbl loc 
set companySize = sum(locationSize) 
where comp.PRIMARY = loc.companyID 

我越來越鏈接「無效使用羣組功能」的錯誤

公司可以有多個地點

是我想做的事情嗎?我想獲取屬於特定公司的地點總數,並用總和更新companySize。

謝謝!

回答

9

用途:

UPDATE company_tbl comp 
    SET companySize = (SELECT SUM(lt.locationSize) 
         FROM location_tbl lt 
         WHERE lt.companyid = comp.primary) 

... or you could use a view,包含:

SELECT c.primary, 
      COALESCE(SUM(lt.locationsize), 0) AS companysize 
    FROM company_tbl c 
LEFT JOIN location_tbl lt ON lt.companyid = c.primary 
+0

對您的查詢進行一些更新。 WHERE lt.companyid = comp.primary 否則每companySize將是相同的:-) 所以我把它這是不可能做到的更新與此語法? 更新company_tbl補償,location_tbl祿 集companySize = SUM(locationSize) 其中comp.PRIMARY = loc.companyID 只是出於好奇,我喜歡學習新的東西:-) – Kukoy 2010-06-18 18:15:27

+0

@Idealflip:如果沒有表的別名(一般在UPDATE語句中不被接受),那麼沒有表別名的列引用適用於沒有定義任何別名的表。 – 2010-06-18 18:17:31

+0

您應該使用該視圖。除非您絕對需要針對公司規模的讀取進行優化,否則最好每次計算一次。如果您可以計算另一列中的某一列的值,則可以設置自己的狀態,以使兩個值不同步。 – Kendrick 2010-06-18 18:23:27

2

首先初始化companySize爲零:

UPDATE company_tbl SET companySize = 0; 

然後對每個匹配的位置排,加locationSize:

UPDATE company_tbl comp JOIN location_tbl loc ON comp.PRIMARY = loc.companyID 
SET comp.companySize = comp.companySize + loc.locationSize; 

在您爲每家公司處理完所有匹配位置之後,您會得到所需的金額。