कभी-कभी डेटाबेस डिज़ाइन में एक मुख्य टेबल होती है जो विभिन्न उप-टेबल्स को संदर्भित करती है, जहां प्रत्येक उप-टेबल एक विशिष्ट इकाई से संबंधित डेटा रखती है। MySQL में ऐसे डेटा-चालित संबंधों को CASE स्टेटमेंट और मल्टीपल LEFT JOIN के साथ क्वेरी किया जा सकता है।
उदाहरण: छात्रों के रिमार्क्स अलग-अलग टेबल्स में
मुख्य टेबल Student_Detail:
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 |
+----+-------------+
क्वेरी: CASE के साथ LEFT JOIN
mysql> SELECT
sd.id,
sd.name,
CASE sd.name
WHEN 'Harshit' THEN h1.Remarks
WHEN 'Rahul' THEN r1.Remarks
WHEN 'Aarav' THEN a1.Remarks
ELSE 'Error'
END AS REMARKS
FROM Student_Detail sd
LEFT JOIN Student_Harshit h1 ON sd.id = h1.id
LEFT JOIN Student_Rahul r1 ON sd.id = r1.id
LEFT JOIN Student_Aarav a1 ON sd.id = a1.id;
परिणाम:
+----+---------+-------------+
| id | name | REMARKS |
+----+---------+-------------+
| 1 | Harshit | Excellent |
| 2 | Rahul | Average |
| 3 | Aarav | Intelligent |
+----+---------+-------------+
व्याख्या
- मुख्य टेबल से प्रत्येक पंक्ति के लिए,
CASEनाम के आधार पर तय करता है कि किस जॉइन की गई टेबल से रिमार्क्स लेना है। - सभी संभावित टेबल्स को
LEFT JOINकिया जाता है ताकि कोई पंक्ति छूटे नहीं। - यह पैटर्न तब उपयोगी है जब स्कीमा बदलना संभव न हो और डेटा विभिन्न टेबल्स में बंटा हो।
बेहतर विकल्प
यदि संभव हो, तो एक ही Student_Remarks टेबल में student_id और remarks कॉलम रखना बेहतर डिज़ाइन है। फिर साधारण JOIN पर्याप्त होगा।