Rumah  >  Soal Jawab  >  teks badan

Gunakan pertanyaan SQL untuk menyemak sama ada entri mengandungi senarai nilai dan bandingkan

<p>Saya mempunyai dua jadual MySql dengan skema berikut</p> <pre class="brush:php;toolbar:false;">Courses(CNO:CHAR(10),CName:VARCHAR(50), DeptId:CHAR(3)): Setiap kursus mempunyai ID unik yang dipanggil CNO Daftar(RNO:CHAR(10), CNO:CHAR(10), Tahun:INTEGER, Sem:INTEGER, Gred:CHAR)</pra> <p>Tugas semasa ialah mencari semua tupel yang memuaskan (r1, r2, d), di mana pelajar dengan nombor pelajar r1 telah melengkapkan semua DeptId yang dilengkapkan oleh pelajar dengan nombor pelajar r2, dan DeptId ialah < strong>ID</ kursus jabatan Strong>. </p> <p>Kaedah saya ialah mencari dahulu semua kursus yang disiapkan di jabatan oleh pelajar dengan nombor pelajar r2, dan kemudian juga mencari semua kursus yang disiapkan di jabatan oleh pelajar dengan nombor pelajar r1, dan bandingkan sama ada ia adalah sama. Tetapi saya tidak tahu sama ada ini betul atau bagaimana untuk membandingkan kedua-dua keputusan. </p> <p>Ini ialah kod yang saya gunakan untuk menyemak semua kursus yang disiapkan oleh pelajar dengan nombor sekolah menengah r2 dalam jabatan tertentu: </p> <p>Berikut ialah pautan ke kod dan data DB Fiddle</p>
P粉270842688P粉270842688391 hari yang lalu483

membalas semua(1)saya akan balas

  • P粉799885311

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

    Ini kaedah saya

    Langkah 1: Buat jadual dengan dua lajur, pelajar1 dan pelajar2, yang mengandungi gabungan unik pelajar

    Contohnya:

    RNO1 RNO2
    1    2
    1    3
    2    3

    Langkah 2: Buat jadual dengan menambahkan DeptId unik untuk setiap DeptId berbeza daripada jadual sebelumnya

    Contohnya:

    RNO1 RNO2 DeptId
    1    2    IME
    1    2    CHE
    1    2    ECO
    1    3    IME
    1    3    CHE
    2    3    ECO

    Langkah 3: Akhirnya, hanya tupel di mana RNO1 dan RNO2 telah mengambil kursus yang sama dalam setiap DeptId dikekalkan.

    Berikut ialah contoh di mana rno1_rno2_deptid merujuk kepada jadual di atas

    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))
    
    

    Di atas hanya memilih kes di mana RNO1 dan RNO2 mempunyai CNO yang sama dalam siri yang sama.

    balas
    0
  • Batalbalas