我有一個數據庫與幾個表。我試圖創建一個視圖,該視圖將從頂層表中獲取一列,並從最終表中獲取需要4個連接的計數函數。計數列值4加入
這就是我所擁有的。
ClassData SubclassData FCStackData
id || name id || name || class_id id || name || sc_id
1 || class one 1 || sc1 || 2 1 || s1 || 2
2 || class two 2 || sc2 || 2 2 || s2 || 2
FlashcardData ScoreData
id||word || def || fcstack_id id || correct || fcd_id
1 || w1 || d1 || 2 1 || true || 2
2 || w2 || d2 || 2 2 || true || 2
好了,所以我需要選擇ClassData.name - 然後我需要一個叫做正確的列,檢查ScoreData並返回我的每個不同的類來了一個真值的次數。
所以在我的上述基本表,我想我的查詢返回此:
Class Name || Correct
class one || null <-- no corresponding data in scoredata
class two || 2 <-- both columns in scoredata are for this
這裏是我的查詢,我知道的是非常錯誤的,但我不知道如何解決,甚至這個。
SELECT ClassData.name as ClassName,
COUNT(CASE WHEN ScoreData.correct
= 'true' THEN 1 END) AS Correct
FROM ((((ClassData
INNER JOIN SubclassData ON ClassData.id = SubclassData.class_id)
LEFT OUTER JOIN FCStackData ON SubclassData.id = FCStackData.subclass_id)
LEFT OUTER JOIN FlashcardData ON FCStackData.id = FlashcardData.fcstack_id)
RIGHT OUTER JOIN ScoreData ON FlashcardData.id = ScoreData.fcdata_id)
GROUP BY ClassData.name
注:我簡化了表,查詢了一下,剛取出不會對這個問題重要數據。
所以我實際從這個查詢得到的只是我的第一個ClassData.name項目和計數列爲1(我只有一個實際的數據庫中的條目)。
? –
老實說,我只是想改變4個連接,使用盡可能多的組合,只是爲了看看會發生什麼。這恰好是我停下來的最後一個。 – user3007447
對於它的價值......內連接B的意思是「給我所有來自表A的行,其中至少有一個對應的行B」,左外連接B表示「給我所有來自A的行,與來自B的行(如果存在的話)匹配,並且對於任何情況,其中來自B的多於一行的行重複來自A的行「,並且右外連接B意味着左外連接的相反(來自B的所有行,無論是否存在)。所以你可能想要所有的左外連接。 –