2011-12-07 48 views
2

我有一個表dutyrecord存儲多個用戶的工作小時(小計) 和用戶ID(志願者ID)。用下面的選擇語句我要設置一個總學時爲每個用戶名:更新和選擇在一個通道

SELECT 
dutyrecord.VolunteerID, 
SEC_TO_TIME(SUM(TIME_TO_SEC(SubTotal))) AS total 
FROM 
volunteerinfo 
INNER JOIN 
dutyrecord ON 
(volunteerinfo.VolunteerID = dutyrecord.VolunteerID) 
GROUP BY 
dutyrecord.VolunteerID 

我能合併的更新語句有選擇更新總學時爲每個用戶?我想是這樣和其他一些方法,沒有運氣:

UPDATE volunteerinfo 
SET 
TotalHours = 
( 
SELECT dutyrecord.VolunteerID , 
SEC_TO_TIME(SUM(TIME_TO_SEC(SubTotal))) AS total 
FROM 
volunteerinfo 
INNER JOIN 
dutyrecord ON (volunteerinfo.VolunteerID = dutyrecord.VolunteerID) 
GROUP BY 
dutyrecord.VolunteerID 
) 
WHERE 
volunteerinfo.VolunteerID = dutyrecord.VolunteerID` 

誰能給我一個手呢?

UPDATE
對不起幾個嘗試和其他的例子我想出的答案,更清晰的方式來問我的問題。 要清除我的問題:我是否可以將此過程合併爲一個過程,因爲我想使此過程語言獨立? (我只帶有1個SQL語句在不同的演出。)

  • 首先,我選擇一個表給我和的工作時間爲每個人

    SELECT VolunteerID,SEC_TO_TIME(SUM(TIME_TO_SEC(小計)))總計 FROM dutyrecord GROUP BY VolunteerID

    eg ID:10001,1時00分02秒ID:2001年,10點00分34秒....

  • 後,我想更新的結果(總)到另一個表中根據自己的ID

    更新Volunteerinfo 集Volunteerinfo.totalhours = dutyrecord.total 其中Volunteerinfo.VolunteerID = dutyrecord.VolunteerID

回答

0

我的答案是首先將兩個表連接在一起,然後update和select語句將在一行中工作。請也評論我內部連接或其他方式是否會提高此查詢的性能。

update volunteerinfo I 
join 
    (SELECT VolunteerID, SEC_TO_TIME(SUM(TIME_TO_SEC(SubTotal))) AS total 
FROM dutyrecord 
GROUP BY VolunteerID) R on R.volunteerid = I.volunteerid 
set I.totalhours = R.total 
0

的問題是,你只更新一個字段TotalHours但你的子查詢中選擇2場(包括dutyRecord.VolunteerIDtotal) 。從你的子查詢中刪除dutyrecord.VolunteerID,它應該可以工作。新的查詢應該是這樣的:

編輯:您還需要包括dutyrecordUPDATE聲明,因爲你是在WHERE條件引用它。

UPDATE volunteerinfo, dutyrecord 
SET 
volunteerinfo.TotalHours = 
( 
SELECT 
SEC_TO_TIME(SUM(TIME_TO_SEC(SubTotal))) AS total 
FROM 
volunteerinfo 
INNER JOIN 
dutyrecord ON (volunteerinfo.VolunteerID = dutyrecord.VolunteerID) 
GROUP BY 
dutyrecord.VolunteerID 
) 
WHERE 
volunteerinfo.VolunteerID = dutyrecord.VolunteerID 
+0

感謝您的快速響應,錯誤#1093 - 您無法在FROM子句中指定目標表'volunteerinfo'進行更新。此外,我認爲嵌套選擇將提供1組總小時數(對於具有相同VolunteerID的許多記錄,例如ID:10001總計:15:10,ID:20002總計:1:01:02)。所以它是每個案例的動態更新值。不知道是否有可能 –