我有一个像这样的表
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)
答案 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