我一直在寻找我的问题的答案,但无济于事。 问题如下,当我尝试在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.感谢提前。
答案 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
也许。
您所做的只是增加所有家庭的子计数,每次运行查询时只有一个匹配的孩子。