2014-10-05 45 views
0

我试图用另一个表中发生的次数来更新表的一个字段,但到目前为止我没有运气。这是我有:SQL更新与每行的计数

Update S 
SET Hours = Hours + COUNT(S.ID) 
FROM S, E 
ON S.ID = E.ID 
WHERE S.ID = E.ID 
GROUP BY S.ID; 

我被迫使用了可怕的错误处理,只能提供给我的错误是一个语法错误的描述的程序。我已经成功实现了一条返回我想要的select语句:

Select COUNT(S.ID) 
FROM S, E 
WHERE S.ID = E.ID 
GROUP BY S.ID; 

我在这里错过了一些非常简单的东西吗?

回答

1
update s 
    set hours = 
     (select count(*) from e where e.id = s.id) 
+0

你缺少更新的一部分。该运要与他小时列添加计数不只是发生在案件的数量代替你要修复它:) – 2014-10-05 18:48:56

+0

@JohnRuddell他提供的选择查询,他声称提供了他想要的结果数量,但并没有这样做。 “小时数+”在他的“坏的查询”内,他说这是行不通的。在他的其他地方,他说他想用计数来更新它。 – 2014-10-05 18:54:23

+0

我一定误会了,因为我在想,当操作说查询返回他想要的数字时,他想要添加到他的列中的数字......但它也可能意味着替换,所以我现在就dono。 – 2014-10-05 19:29:19

1
Update S 
JOIN 
(
    select id, COUNT(*) as cnt 
    from e 
    group by id 
) TMP ON S.ID = TMP.ID 
SET S.Hours = S.Hours + TMP.cnt