两个不同的表连接一个主表

时间:2014-09-09 09:53:51

标签: mysql join master

我有三张桌子:

  1. 群组 group_id ,group_name)
  2. 课程(lesson_id,,lesson_name)
  3. 测试(test_id,,test_name)
  4. 因此,在一个小组中,可能会有许多课程和测试。现在我想在SINGLE QUERY中获得每组课程和测试次数。

    以下是我的工作方式:

    SELECT group_id,group_name,COUNT(lessons.lesson_id),COUNT(tests.test_id) 来自群组

    LEFT JOIN课程on lessons.group = groups.group_id

    LEFT JOIN测试on tests.group = groups.group_id

    GROUP BY groups.group_id

    但它会为两个COUNT返回错误的值。如果我仅针对课程或测试运行相同的查询,则返回正确但不能同时使用单个查询。

    更新

    Rishabh回答了这个问题,而且效果很好。如果我在单个查询中获取所有课程和测试时不必使用聚合函数i-e,该怎么办?

    SELECT group_id,group_name,lessons.lesson_name,tests.test_name 来自群组

    LEFT JOIN课程on lessons.group = groups.group_id

    LEFT JOIN测试on tests.group = groups.group_id

    这会导致结果中出现重复记录。有什么建议吗?

    GROUP BY groups.group_id

1 个答案:

答案 0 :(得分:0)

SELECT group_id,group_name,COUNT(DISTINCT lessons.lesson_id),COUNT(DISTINCT tests.test_id)FROM groups

LEFT JOIN课程on lessons.group = groups.group_id

LEFT JOIN测试on tests.group = groups.group_id

GROUP BY groups.group_id