Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การจัดการความสัมพันธ์ตารางแบบ Data-driven ด้วย JOIN และ CASE

ปัญหา: ตารางแยกตามชื่อนักเรียน

เมื่อมีตารางหลัก Student_Detail และตารางย่อยแยกตามชื่อ เช่น Student_Harshit, Student_Rahul, Student_Aarav ต้องใช้วิธีพิเศษในการ JOIN

โครงสร้างข้อมูล

-- ตารางหลัก
mysql> SELECT * FROM student_detail;
+----+---------+
| Id | Name    |
+----+---------+
| 1  | Harshit |
| 2  | Rahul   |
| 3  | Aarav   |
+----+---------+

-- ตารางย่อยแต่ละคน
mysql> SELECT * FROM Student_Harshit;
+----+-----------+
| Id | Remarks   |
+----+-----------+
| 1  | Excellent |
+----+-----------+

mysql> SELECT * FROM Student_Rahul;
+----+---------+
| Id | Remarks |
+----+---------+
| 2  | Average |
+----+---------+

mysql> SELECT * FROM Student_Aarav;
+----+-------------+
| Id | Remarks     |
+----+-------------+
| 3  | Intelligent |
+----+-------------+

คำสั่ง SQL ใช้ CASE WHEN

SELECT 
    sd.id, 
    sd.name,
    CASE name 
        WHEN 'Harshit' THEN H1.Remarks 
        WHEN 'Rahul' THEN R1.Remarks 
        WHEN 'Aarav' THEN A1.Remarks 
        ELSE 'Error' 
    END AS REMARKS
FROM Student_detail AS sd
LEFT JOIN Student_Harshit AS H1 ON sd.id = H1.id
LEFT JOIN Student_Rahul AS R1 ON sd.id = R1.id
LEFT JOIN Student_Aarav AS A1 ON sd.id = A1.id;

ผลลัพธ์

+----+---------+-------------+
| id | name    | REMARKS     |
+----+---------+-------------+
| 1  | Harshit | Excellent   |
| 2  | Rahul   | Average     |
| 3  | Aarav   | Intelligent |
+----+---------+-------------+

หลักการทำงาน

  • LEFT JOIN ทุกตารางย่อยพร้อมกัน
  • CASE WHEN เลือกคอลัมน์ Remarks จากตารางที่ตรงกับชื่อ
  • เหมาะสำหรับโครงสร้างข้อมูลที่แยกตารางตามค่าเฉพาะ (Data-driven)