使用SQL查詢檢查條目是否包含值清單並進行比較
P粉270842688
P粉270842688 2023-08-30 17:47:36
0
1
534
<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的情況。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板