MySQL:选择参加两门不同课程的记录

时间:2014-02-20 20:26:28

标签: mysql join group-by distinct

我有两张桌子,一门课程和一张考勤表。 课程表保存所提供课程的记录 出勤表记录了参加课程的学生姓名和电子邮件的记录以及他们参加的日期。

我需要选择所有出席记录,其中学生已经参加了3门课程中的2门,并输出完成3门课程所需的第3次无人值守课程。

课程表结构:

id : int
course_title : varchar
course_level : int

考勤表结构:

id : int
course_id : int
student_name : varchar
student_email : varchar
attended_date : date

1 个答案:

答案 0 :(得分:0)

尝试此解决方案(找到here

SELECT t1.email, course.course_title
FROM (SELECT email
      FROM attendance
      JOIN course
        ON attendance.course_id = course.id
          AND course.course_level = 1
      GROUP BY email
      HAVING COUNT(DISTINCT attendance.course_id) = 2) AS t1
CROSS JOIN course
LEFT JOIN attendance
  ON attendance.course_id = course.id
    AND attendance.email = t1.email
WHERE course.course_level =1
  AND attendance.id IS NULL;