3 つの異なるテーブルから、店舗 (テーブル 2) に複数回訪問した人 (テーブル 1) がおもちゃを購入して楽しんだかどうか (テーブル 3) を知りたいです。表 3 では、0 はマイナス (つまり楽しんでいない) または購入されていないことを示します。1 はポジティブを表します。すべての訪問には独自の識別番号があります。
私の問題は、table1 のすべての ID に対して、table2 に複数のエントリがあり、table3 に複数のエントリがあり、そのうちの 1 つだけが null であることです。
Person Visit Toy
ID age Number Visit ID number name value
1 12 1 1 1 1 Plane
2 10 2 1 2 1 Train 1
3 2 1 2 Plane 1
4 2 2 2 Train 0
3 Plane 0
3 Train 1
(goes on for every id) (goes on for every visit)
あるおもちゃをどれだけの人が楽しんだか知りたいです。しかし、いくつかの空の情報があるため、両方の訪問に対して価値があるものしか持っていないという問題があります。たとえば、次のコードは、null 条件が訪問の 1 つにのみ配置されている場合にのみ機能します。
Select p.id, max(toy.value) as value
from person p
join visit v on p.id = v.id
join toy t on v.number = t.number
where
((t.name='plane' and v.visit=1)
or (t.name='plane' and v.visit=2))
and (
(v.visit=1 and ((t.value=1 or t.value=0) is not null))
---and (v.visit=2 and ((t.value=1 or t.value=0) is not null))
)
group by p.id
order by p.id
私はこれを書くために多くの方法を試しました。両方の null 条件を個別に試してみると機能しますが、を削除し--
て訪問 1 と 2 の両方で条件を試しても機能しません。正の値が可能であるため、値に max を使用していることに注意してください。