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 に答える