更改多行SQL的值

时间:2013-11-08 18:58:31

标签: sql sql-server

我有一个像这样的表

name | apples | actual_apples
-----------------------------
John |  5     |   10
-----------------------------
Dave |  3     |   4

我通过查询有苹果的人来找到它!=使用count()计算他们的实际苹果。

我想要做的是更改这些行,并为返回的每一行设置apples = actual_apples

我怎样才能实现这样的目标?我试图更新apples属性,但显然它不会让我为返回多个值的东西设置属性

(假设每个苹果都有自己的标识符,这就是我如何计算它们)

Person {name,age,apples}
has {name(FK(Person)),id(FK(Apples))}
Apples {id,type}

apples属性是一个人拥有的苹果数。它可能是不正确的,它只是由输入数据的人设置的。

我可以通过计算它们获得实际拥有的苹果数量(这是我用来获取上表所示的查询)

select p.name, p.apples, count(h.id) as actual_apples
from Person p, has h
where p.name = h.name
group by p.name, p.apples
having apples != count(h.id)

1 个答案:

答案 0 :(得分:0)

试试这个:

update p
set p.apples = x.actual_apples
from Person p
join (
    select p.name, count(a.id) as [actual_apples]
    from Person p
    join has on has.name = p.name
    join Apples a on a.id = has.id
    group by p.name) x on p.name = x.name
where p.apples != x.actual_apples