首页  >  问答  >  正文

使用SQL查询检查条目是否包含值列表并进行比较

<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粉270842688P粉270842688391 天前478

全部回复(1)我来回复

  • P粉799885311

    P粉7998853112023-08-31 10:19:18

    这是我的方法

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

    回复
    0
  • 取消回复