MySQL查询从表中获取信息,并获取相关表的计数。不包括所有记录

时间:2012-02-28 23:06:57

标签: mysql database database-design

我想运行一个抓取所有课程的查询。每行(课程)也应该有 user_count

让我快速展示我的桌面结构。我有两张相关的表格。这不会显示这些表的所有字段,只显示相关信息。

COURSE
id
title
desc

USER_COURSE
id
user_id (fk)
course_id (fk)

我对此的第一个尝试是创建以下查询:

SELECT course.title, course.desc, COUNT(*) as `user_count` 
FROM (`course`) 
JOIN `user_course` ON `user_course`.`course_id` = `course`.`id` 
GROUP BY `user_course`.`user_id`

此查询的问题是它只显示在user_course表中有记录的课程。指针?

2 个答案:

答案 0 :(得分:2)

关键点:

  1. count(*)应为COUNT(user_course.user_id),因为您在计算每门课程的用户数
  2. ON条件必须用括号括起来
  3. 按照course.id使用分组,因为您要按结果对结果进行分组。
  4. 请参阅下面的查询。

        SELECT course.title, 
               course.desc, 
               COUNT(`user_course`.`user_id`) AS `user_count` 
        FROM   `course` 
               JOIN `user_course` 
                 ON ( `user_course`.`course_id` = `course`.`id` ) 
        GROUP  BY `course`.`id` 
    

答案 1 :(得分:0)

尝试左外连接。 而不是'join',写'left outer join'。

还将计数包装在isnull(count(*),0)中以不将记录捕获为0值