2013-07-02 49 views
0

從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的條件,則不起作用。請注意,我對該值使用了最大值,因爲我想要一個正值。

回答

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 
+0

在我的表中,我有更多然後只是2次訪問,所以這就是爲什麼我指定了其中2個。另外,不要只有那些只有1的人,但他們都是。最大值是顯示兩者中最高的。我正在尋找那些有兩次訪問的條目。在t.value = 1(或0)的情況下,您不掃描空條目 – Renaud

+0

您是否可以在**訪問**表中澄清列**號**和**訪問**的含義。 –

+0

只是訪問的Id和訪問者的第n次訪問 – Renaud

0

我用計數的方式來消除所有的空項。空值和值之和始終爲空,因此通過添加限制count=2它消除空