使用SQL查询检查条目是否包含值列表并进行比较
P粉270842688
P粉270842688 2023-08-30 17:47:36
0
1
468

我有两个具有以下模式的MySql表

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)

现在的任务是找到所有满足(r1,r2,d)的元组,其中学号为r1的学生完成了学号为r2的学生所完成的所有DeptId为ID的部门的课程。

我的方法是首先找到学号为r2的学生在该部门完成的所有课程,然后类似地找到学号为r1的学生在该部门完成的所有课程,并比较它们是否相同。但我不知道这样是否正确,也不知道如何比较这两个结果。

这是我用来检查特定部门中学号为r2的学生完成的所有课程的代码:

这是代码和数据DB Fiddle的链接

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的情况。

    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责声明 Sitemap
    PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!