首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查找两个表之间的值

查找两个表之间的值
EN

Database Administration用户
提问于 2019-03-21 07:25:15
回答 1查看 41关注 0票数 1

我正在开发一个简单的课程建议应用程序。根据他们的文凭成绩向学生推荐学位课程。

这是我数据库里的桌子。

代码语言:javascript
运行
复制
+-----------------------------+
| Tables_in_available_courses |
+-----------------------------+
| course                      |
| course_requirements         |
| qualification               |
| result                      |
| student                     |
| student_result              |
+-----------------------------+

一个学生有多个资格证书,一个课程也有多个资格要求。

此系统应根据结果将所有建议的课程打印给数据库中的每个学生。

我的成绩是计算机文凭-管理文凭-软件工程B文凭-C

计算机科学学位课程的预修要求是计算机文凭-软件工程文凭-C

所以系统应该向我推荐计算机科学

代码语言:javascript
运行
复制
    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    |                |
+------------------+---------+------+-----+---------+----------------+

如何实施?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2019-03-21 08:19:16

代码语言:javascript
运行
复制
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字段值添加适当的条件。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/232687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档