Rumah  >  Soal Jawab  >  teks badan

Tukar lajur apabila menyertai dua jadual SQL

Senarionya jika saya mempunyai meja pelajar dan mereka mempunyai 4 kelas dan mereka hanya tahu nombor bilik. Terdapat juga dua meja, satu dengan nama guru dan nombor bilik, satu lagi dengan nama guru dan mata pelajaran yang mereka ajar. Sekarang pelajar ingin tahu siapa guru matematik mereka, mereka hanya mahu nama pelajar dan nama guru matematik.

Ini ialah senario fiksyen untuk projek baucar yang sedang saya usahakan. Saya telah membuatnya berfungsi dalam banyak situasi, tetapi ia sangat perlahan. Keadaan kes untuk mencipta lajur baharu tidak melambatkan apa-apa dan saya meninggalkan sertai jadual menggunakan keadaan kes yang sama kerana kita tidak tahu lajur mana untuk mengaitkan jadual pelajar dengan jadual guru. Keadaan kes dalam gabungan kiri nampaknya menyebabkan masalah, adakah terdapat kaedah lain yang boleh saya gunakan untuk mendapatkan hasil yang sama tanpa berlengah-lengah?

P粉285587590P粉285587590236 hari yang lalu374

membalas semua(1)saya akan balas

  • P粉514458863

    P粉5144588632024-02-27 00:26:59

    Saya rasa sebab anda menghadapi banyak masalah ialah seni bina anda tidak begitu bagus. Khususnya skema jadual pelajar yang terdapat lajur untuk setiap nombor kursus/bilik.

    Saya mula-mula membetulkan ini menggunakan subkueri, contohnya:

    SELECT `Student Name`, 1 as Period, `1st Room#` as Room FROM students
    UNION ALL
    SELECT `Student Name`, 2 as Period, `2nd Room#` as Room FROM students
    UNION ALL 
    SELECT `Student Name`, 3 as Period, `3rd Room#` as Room FROM students
    UNION ALL 
    SELECT `Student Name`, 4 as Period, `4th Room#` as Room FROM students

    "Unpivoting" seperti ini akan memberikan anda seni bina bersih Student Name |期间 | Room yang bagus yang akan memudahkan penyelesaian masalah ini.

    SELECT `Student Name`, Subject.`Teacher Name`
    FROM 
        (
          SELECT `Student Name`, 1 as Period, `1st Room#` as Room FROM students
          UNION ALL
          SELECT `Student Name`, 2 as Period, `2nd Room#` as Room FROM students
          UNION ALL 
          SELECT `Student Name`, 3 as Period, `3rd Room#` as Room FROM students
          UNION ALL 
          SELECT `Student Name`, 4 as Period, `4th Room#` as Room FROM students
        ) students
        INNER JOIN teacherRoom
           ON students.Room = teacherRoom.`Room Number`
        INNER JOIN teacherSubject
           ON teacherRoom.`Teacher Name` = teacherSubject.Subject
    WHERE teacherSubject.Subject = 'Math';

    balas
    0
  • Batalbalas