Heim  >  Fragen und Antworten  >  Hauptteil

Verwenden Sie eine SQL-Abfrage, um zu prüfen, ob ein Eintrag eine Werteliste enthält, und vergleichen Sie ihn

<p>Ich habe zwei MySql-Tabellen mit dem folgenden Schema</p> <pre class="brush:php;toolbar:false;">Courses(CNO:CHAR(10),CName:VARCHAR(50), DeptId:CHAR(3)): Jeder Kurs hat eine eindeutige ID namens CNO Register(RNO:CHAR(10), CNO:CHAR(10), Jahr:INTEGER, Sem:INTEGER, Note:CHAR)</pre> <p>Die aktuelle Aufgabe besteht darin, alle Tupel zu finden, die (r1, r2, d) erfüllen, in denen der Student mit der Studentennummer r1 alle vom Studenten mit der Studentennummer r2 ausgefüllten DeptIds abgeschlossen hat und die DeptId <p> strong>ID</ Kurse der Strong>-Abteilung. </p> <p>Meine Methode besteht darin, zuerst alle Kurse zu finden, die der Student mit der Studentennummer r2 in der Abteilung abgeschlossen hat, und dann auf ähnliche Weise alle Kurse zu finden, die der Student mit der Studentennummer r1 in der Abteilung abgeschlossen hat, und zu vergleichen, ob sie es sind Dasselbe. Aber ich weiß nicht, ob das richtig ist und wie ich die beiden Ergebnisse vergleichen soll. </p> <p>Dies ist der Code, den ich verwende, um alle Kurse zu überprüfen, die der Schüler mit der Mittelschulnummer r2 in einer bestimmten Abteilung abgeschlossen hat: </p> <p>Hier ist der Link zum Code und den Daten DB Fiddle</p>
P粉270842688P粉270842688391 Tage vor485

Antworte allen(1)Ich werde antworten

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

    Antwort
    0
  • StornierenAntwort