Rumah > Soal Jawab > teks badan
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粉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';