從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