我正在开发一个简单的课程建议应用程序。根据他们的文凭成绩向学生推荐学位课程。
这是我数据库里的桌子。
+-----------------------------+
| Tables_in_available_courses |
+-----------------------------+
| course |
| course_requirements |
| qualification |
| result |
| student |
| student_result |
+-----------------------------+一个学生有多个资格证书,一个课程也有多个资格要求。
此系统应根据结果将所有建议的课程打印给数据库中的每个学生。
我的成绩是计算机文凭-管理文凭-软件工程B文凭-C
计算机科学学位课程的预修要求是计算机文凭-软件工程文凭-C
所以系统应该向我推荐计算机科学
mysql> show columns from student_result;
+------------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| qualification_id | int(11) | YES | MUL | NULL | |
| result_id | int(11) | YES | MUL | NULL | |
| student_id | int(11) | YES | MUL | NULL | |
+------------------+---------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> show columns from course_requirements;
+------------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| course_id | int(11) | NO | MUL | NULL | |
| qualification_id | int(11) | YES | MUL | NULL | |
| result_id | int(11) | YES | MUL | NULL | |
+------------------+---------+------+-----+---------+----------------+如何实施?
发布于 2019-03-21 08:19:16
WITH cte1 AS ( SELECT cr.course_id, sr.student_id, COUNT(*) cnt
FROM course_requirements cr
JOIN student_result sr ON cr.qualification_id = sr.qualification_id
GROUP BY cr.course_id, sr.student_id
),
cte2 AS ( SELECT course_id, COUNT(qualification_id) cnt
FROM course_requirements
GROUP BY course_id
)
SELECT DISTINCT cte1.course_id, cte1.student_id
FROM cte1, cte2
WHERE cte1.cnt = cte2.cnt
ORDER BY 1,2如果需要,通过result_id字段值添加适当的条件。
https://dba.stackexchange.com/questions/232687
复制相似问题