2015-12-20 3 views
1

Я хочу сделать запрос реляционного деления. Во-первых, здесь структура каждой таблицы:Как я могу выполнить этот запрос реляционного деления?

Student

id 
name 

курс

id 
name 

Student_passed_course (узловая таблица, которая хранит, которые прошли какой курс)

id_student 
id_course 

В принципе, я хочу получить имена студентов, которые прошли все курсы, которые существуют в таблице Course, используя JOIN (или LEFT JOIN и т. Д.). Я уже реализовал решение, используя NOT EXISTS.

Также это уравнение, которое я сделал. My relational algebra formula

ответ

0

раствор на основе РЕГИСТРИРУЙТЕСЬ может быть следующим:

SELECT s.name AS student_name, c.name as course_name FROM (
SELECT s_id, c_id, SUM(c_exists) AS c_exists, SUM(c_taken) as c_taken, SUM(c_exists)-SUM(c_taken) as not_taken FROM (
SELECT s.id as s_id, c.id as c_id, 1 as c_taken, 0 as c_exists FROM student s JOIN student_passed_course spc ON spc.id_student = s.id JOIN course c ON c.id = spc.id_course 
UNION ALL 
SELECT s.id as s_id, c.id as c_id, 0 as c_taken, 1 as c_exists FROM student s JOIN course c 
) X group BY s_id, c_id) Y 
JOIN student s ON s.id = s_id JOIN course c ON c_id = c.id 
WHERE not_taken = 1; 

Я не знаю, если это будет более или менее эффективной, чем решения.

Смежные вопросы