2011-12-07 25 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)。所以它是每个案例的动态更新值。不知道是否有可能 –