使用SQL查询检查条目是否包含值列表并进行比较
P粉270842688
P粉270842688 2023-08-30 17:47:36
0
1
517
<p>我有两个具有以下模式的MySql表</p> <pre class="brush:php;toolbar:false;">Courses(CNO:CHAR(10),CName:VARCHAR(50), DeptId:CHAR(3)):每门课程都有一个唯一的ID叫做CNO Register(RNO:CHAR(10), CNO:CHAR(10), Year:INTEGER, Sem:INTEGER, Grade:CHAR)</pre> <p>现在的任务是找到所有满足(r1,r2,d)的元组,其中学号为r1的学生完成了学号为r2的学生所完成的所有DeptId为<strong>ID</strong>的部门的课程。</p> <p>我的方法是首先找到学号为r2的学生在该部门完成的所有课程,然后类似地找到学号为r1的学生在该部门完成的所有课程,并比较它们是否相同。但我不知道这样是否正确,也不知道如何比较这两个结果。</p> <p>这是我用来检查特定部门中学号为r2的学生完成的所有课程的代码:</p> <p>这是代码和数据DB Fiddle的链接</p>
P粉270842688
P粉270842688

全部回复(1)
P粉799885311

这是我的方法

步骤1: 创建一个带有两列的表,student1和student2,其中包含学生的唯一组合

例如:

RNO1 RNO2
1    2
1    3
2    3

步骤2: 创建一个表,为上一个表的每个不同的DeptId添加一个唯一的DeptId

例如:

RNO1 RNO2 DeptId
1    2    IME
1    2    CHE
1    2    ECO
1    3    IME
1    3    CHE
2    3    ECO

步骤3: 最后,只保留RNO1和RNO2在每个DeptId中都选修了相同课程的元组。

以下是一个示例,其中rno1_rno2_deptid指的是上面的表

SELECT
   *
FROM
   rno1_rno2_deptid as d
WHERE
   NOT EXISTS((SELECT DISTINCT CNO FROM Register AS r WHERE r.RNO = d.RNO1 AND r.DeptId = d.DeptId) 
   MINUS 
   (SELECT DISTINCT CNO FROM Register AS r WHERE r.RNO = d.RNO2 AND r.DeptId = d.DeptId))

以上只选择RNO1和RNO2在同一系别中具有相同CNO的情况。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板