2014-02-20 2 views
0

У меня есть два стола, курс и таблица посещаемости. В таблице курсов хранятся записи предлагаемых курсов Таблица посещаемости ведет учет имен учеников и электронных писем, которые посещали предлагаемые курсы и дату их посещения.MySQL: выбор записей, которые посещали два разных курса из 3

Мне нужно выбрать все записи посещаемости, в которых участвовал ровно 2 из 3 предлагаемых курсов, и выпустить 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

Что ваш написано до сих пор? Выделите данные примера через SQLFiddle.com и покажите ожидаемые результаты. – AgRizzo

+0

@AgRizzo Вот [SQL Fiddle] (http://sqlfiddle.com/#!2/47fe03/1) – TechMafioso

+0

Я смущен тем, что вы подразумеваете под курсами «2 из 3». В приведенном примере есть 7 курсов. – Jim

ответ

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; 
Смежные вопросы