1

我有一张这样的桌子

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)
4

1 回答 1

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
于 2013-11-08T19:01:37.580 回答