2010-11-21 76 views
0

- 會產生不正確值total_classes這兩個查詢有什麼區別?爲什麼不同的結果

SELECT IFNULL(count(wc.id_wc),0) AS total_classes 

FROM `all_tag_relations` AS a 
    LEFT JOIN (tags AS t, WebClasses as wc) 
    ON (a.id_tag = t.id_tag AND a.id_tutor = wc.id_author) 
GROUP BY a.id_tutor 

但是這一次 - 使用子查詢提供了正確的價值觀 -

SELECT (SELECT IFNULL(count(wc.id_wc),0) FROM WebClasses as wc WHERE wc.id_author = a.id_tutor) AS total_classes 


FROM `all_tag_relations` AS a 
    LEFT JOIN (tags AS t) ON (a.id_tag = t.id_tag) 
group by a.id_tutor 

解決方案 解決的辦法是加入其他表與實際的Tutors表All_Tag_relations像這樣

...FROM Tutors as td on join All_Tag_Relations as a on td.id_tutor=a.id_tutor LEFT JOIN ... 
+0

你問爲什麼把左邊的表格改爲右邊的區別? – Mikhail 2010-11-21 16:05:21

回答

0

您的查詢都很奇怪,並且您不清楚您要做什麼。也許你應該顯示你的表格並要求一個查詢來檢索你想要的數據。

這些查詢之間的區別主要在於第二個給出WebClass的總數,第二個給出的數字ob WebClasses乘以作者/導師數乘以標籤數量,假設它們是不相交的並且標籤,WebClasses和all_tag_relations之間都有1:n的關係。

+0

是的,我明白在第一種情況下會發生一些乘法運算。我想要''total_classes''列中的作者獲得類的總數。在第一個查詢中需要進行什麼更改才能生成與第二個查詢相同的輸出? – 2010-11-21 16:29:07

+0

你是對的,導師和標記相關之間有1:n的關係。在all_tag_relations表中,每個輔導員都有多個記錄,因此有多個記錄。 – 2010-11-21 16:58:32

+0

那麼,每個作者的類數是'SELECT id_author,COUNT(*)FROM WebClasses GROUP BY id_author'。標籤是如何進來的? – AndreKR 2010-11-21 17:19:00

相關問題