首頁  >  問答  >  主體

使用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 天前486

全部回覆(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
  • 取消回覆