从 3 张不同的桌子上,我想知道一个人(桌子 1)是否曾多次访问商店(桌子 2),是否购买过玩具并喜欢它们(桌子 3)。在表 3 中,0 代表否定(因此不喜欢)或未购买。1 代表正极。每次访问都有自己的识别号码。
我的问题是,对于 table1 中的每个 ID,我有多个 table2 条目,我有多个 table3 条目,其中只有一个为空。
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 条件放置在访问之一上时才有效
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 是因为我想要一个正值是可能的。