2010-11-21 98 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