0

我一直在寻找我的问题的答案,但无济于事。问题如下,当我尝试在 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。提前致谢。

4

3 回答 3

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
于 2013-06-26T16:32:38.397 回答
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

也许。

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

于 2013-06-26T16:35:32.003 回答
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 的多个增量,您将需要使用某种形式的计数。

于 2013-06-26T16:31:59.113 回答