2017-08-12 63 views
1

我有一個數據庫與幾個表。我試圖創建一個視圖,該視圖將從頂層表中獲取一列,並從最終表中獲取需要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(我只有一個實際的數據庫中的條目)。

+0

? –

+0

老實說,我只是想改變4個連接,使用盡可能多的組合,只是爲了看看會發生什麼。這恰好是我停下來的最後一個。 – user3007447

+0

對於它的價值......內連接B的意思是「給我所有來自表A的行,其中至少有一個對應的行B」,左外連接B表示「給我所有來自A的行,與來自B的行(如果存在的話)匹配,並且對於任何情況,其中來自B的多於一行的行重複來自A的行「,並且右外連接B意味着左外連接的相反(來自B的所有行,無論是否存在)。所以你可能想要所有的左外連接。 –

回答

1

如果我理解正確的話,那麼你只是想left join S穿透查詢:你爲什麼要使用一個右外(而不是左外)上ScoreData加入

SELECT cd.name as ClassName, 
     SUM(CASE WHEN sd.correct = 'true' THEN 1 ELSE 0 END) AS Correct 
FROM ClassData cd LEFT JOIN 
    SubclassData scd 
    ON cd.id = scd.class_id LEFT JOIN 
    FCStackData fsd 
    ON scd.id = fsd.subclass_id LEFT JOIN 
    FlashcardData fcd 
    ON fsd.id = fcd.fcstack_id LEFT JOIN 
    ScoreData sd 
    ON fcd.id = sd.fcdata_id 
GROUP BY cd.name; 
+0

可能已經發誓我試過了,因爲我已經閱讀了不同的聯合來檢查我要去哪裏錯誤......但是,你是對的!謝謝! – user3007447