代码之家  ›  专栏  ›  技术社区  ›  Sandeepan Nath

这两个查询有什么区别?为什么结果不同?

  •  0
  • Sandeepan Nath  · 技术社区  · 15 年前

    这个 -给出的值不正确 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
    

    解决方案 解决方案是将其他表与具有如下所有标记关系的实际导师表连接起来

    ...FROM Tutors as td on join All_Tag_Relations as a on td.id_tutor=a.id_tutor LEFT JOIN ...
    
    1 回复  |  直到 15 年前
        1
  •  0
  •   AndreKR    15 年前

    你的两个问题都很奇怪,不清楚你想做什么。也许您应该显示您的表并请求一个检索所需数据的查询。

    这些查询之间的区别主要在于,第二个查询给出的是网络类的总数,第二个查询给出的是ob网络类的数量乘以作者/导师的数量乘以标记的数量,假设它们是不相交的,并且标记、网络类和all-tag-u关系之间都存在1:n关系。