使用SQL从多个值中排除空条目

时间:2013-07-02 15:51:19

标签: sql null multiple-tables

从3个不同的表中,我想知道在商店(table2)中多次访问的人(table1)是否购买了玩具并且喜欢它们(表3)。在表3中,0表示否定(因此不喜欢)或未购买。 1代表积极的。每次访问都有自己的识别号码。

我的问题是,对于table1中的每个ID,我有多个table2条目,我有多个table3条目,只有一个是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)

我想知道有多少人喜欢某种玩具。但是,因为我有一些空信息,所以我有一些麻烦,因为那些我只对他们的两次访问都有价值。例如,以下代码仅在空条件仅放置在其中一个访问

时才有效
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,因为我想要一个正值。

2 个答案:

答案 0 :(得分:0)

如果您想知道有多少人喜欢某种玩具,那么您可以简单地写下:

select count(*) from toy t where t.name='TOY NAME' and t.level=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 t.value is not null 
group by p.id 
order by p.id

答案 1 :(得分:0)

我使用count作为消除所有空条目的方法。 null和value的总和始终为null,因此通过添加限制count=2,它将消除null