ปัญหา: ตารางแยกตามชื่อนักเรียน
เมื่อมีตารางหลัก 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)