在单个UPDATE上在mysql上多次递增值

时间:2013-06-26 16:14:16

标签: mysql

我一直在寻找我的问题的答案,但无济于事。 问题如下,当我尝试在SQL中的单个UPDATE语句中多次更新一个值时,它将始终更新一次。就好像UPDATE语句正在处理我的表的副本并始终覆盖原始表上的值,因此结果表只有值递增1而不是值设置为value = value的次数1。

以下是一个例子:

UPDATE Home, Person
SET Home.NumberOfChilds=Home.NumberOfChilds+1
WHERE Home.State= Person.State
AND Home.ZoneCode = Person.ZoneCode 
AND Home.Address = Person.Address
AND Person.IsChild = true;

在这种情况下,如果一个家庭有3个孩子,那么这个家庭的孩子数量将是1,当我需要它时为3.感谢提前。

3 个答案:

答案 0 :(得分:1)

可能在主表中加入的子选项中进行计数: -

UPDATE Home
INNER JOIN (SELECT State, ZoneCode, Address, COUNT(*) AS PersonCount FROM Person WHERE IsChild = true GROUP BY  State, ZoneCode, Address) Sub1
ON Home.State= Sub1.State
AND Home.ZoneCode = Sub1.ZoneCode 
AND Home.Address = Sub1.Address
SET Home.NumberOfChilds = Home.NumberOfChilds + Sub1.PersonCount

答案 1 :(得分:0)

这适用于Sql Server 2008R2,我目前无权访问mysql系统进行测试。

UPDATE H
SET H.NumberOfChilds = ( 
    SELECT COUNT(*) FROM Person AS P
    WHERE H.State = P.State
    AND H.ZoneCode = P.ZoneCode
    AND H.Address = P.Address
    AND P.IsChild = 1 )                       
FROM Home AS H

我认为你不能从一个声明中获得多个1的增量,你需要使用某种形式的计数。

答案 2 :(得分:0)

这样的东西
Update h
Set h.NumberOfChilds = c.ChildCount
From Home h
inner join (Select ZoneCode, Address, Count(*) as ChildCount 
            From Person Where IsChild = true Group By ZoneCode,Address) c
On c.ZoneCode = h.ZoneCode and c.Address = h.Address

也许。

您所做的只是增加所有家庭的子计数,每次运行查询时只有一个匹配的孩子。