Tukar lajur apabila menyertai dua jadual SQL
P粉285587590
P粉285587590 2024-02-26 09:29:39
0
1
425

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粉285587590
P粉285587590

membalas semua(1)
P粉514458863

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';
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan