从3个不同的表中,我想知道在商店(表2)中多次访问的人(table1)是否购买了玩具并享受它们(表3)。在表3中,0表示否定(所以不享受)或不买。 1代表积极的。每次访问都有自己的身份证号码。使用SQL排除来自多个值的空条目
我的问题是,对于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)
我想知道有多少人喜欢某种玩具。但是,由于我有一些空的信息,所以我在遇到这些问题时遇到了一些麻烦,因为我只对他们的访问都有价值。例如,下面的代码仅适用于仅在其中一次访问时放置空条件的情况
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
我已经尝试了很多写这种方法。如果我单独尝试两个空条件,但它确实有效,但是如果我删除--
并尝试访问1和2的条件,则不起作用。请注意,我对该值使用了最大值,因为我想要一个正值。
在我的表中,我有更多然后只是2次访问,所以这就是为什么我指定了其中2个。另外,不要只有那些只有1的人,但他们都是。最大值是显示两者中最高的。我正在寻找那些有两次访问的条目。在t.value = 1(或0)的情况下,您不扫描空条目 – Renaud
您是否可以在**访问**表中澄清列**号**和**访问**的含义。 –
只是访问的Id和访问者的第n次访问 – Renaud