如何在mysql中使用单个查询获取此结果

时间:2014-08-05 15:56:36

标签: php mysql

我有2张桌子

  • 包含id,name,course_id
  • 的学生
  • 包含id,name
  • 的课程

我想获取与2名以上学生相关的课程。

我试过了:

    SELECT * 
      FROM course 
 LEFT JOIN student 
        ON student.course_id=course.id 
     WHERE student.course_id>2

2 个答案:

答案 0 :(得分:2)

您需要在此处使用GROUP BYHAVING条款。也不需要离开这里,因为你只对课程有匹配学生的情况感兴趣。

SELECT
    course.id AS course_id,
    course.name AS course_name,
    COUNT(student.id) AS student_count
FROM course
INNER JOIN student
  ON student.course_id = course.id
GROUP BY course.id
HAVING student_count > 2

您的架构的另一个想法是,如果您打算建立多对多关系,您可能应该考虑第三个表students_to_courses或类似表格,将学生与课程联系起来。您当前的架构只允许学生记录仅与单个课程相关联。

答案 1 :(得分:1)

迈克差点把我打败了;我同意他的结论。

  SELECT c.id, c.name 
    FROM course c
    JOIN student s
      ON s.course_id = c.id
GROUP BY c.id, c.name
  HAVING COUNT(s.id) > 2;