यह परिणाम प्राप्त करने का एक तरीका है।
यह दृष्टिकोण सहसंबद्ध उपश्रेणियों का उपयोग करता है। प्रत्येक सबक्वेरी एक ORDER BY
. का उपयोग करती है तालिका 2 से संबंधित पंक्तियों को क्रमबद्ध करने के लिए खंड, और LIMIT
. का उपयोग करता है पहली, दूसरी और तीसरी पंक्तियों को पुनः प्राप्त करने के लिए खंड।
SELECT a.PKID
, a.DATA
, (SELECT b1.U_DATA FROM table2 b1
WHERE b1.PKID_FROM_TABLE_1 = a.PKID
ORDER BY b1.U_DATA LIMIT 0,1
) AS U_DATA1
, (SELECT b2.U_DATA FROM table2 b2
WHERE b2.PKID_FROM_TABLE_1 = a.PKID
ORDER BY b2.U_DATA LIMIT 1,1
) AS U_DATA2
, (SELECT b3.U_DATA FROM table2 b3
WHERE b3.PKID_FROM_TABLE_1 = a.PKID
ORDER BY b3.U_DATA LIMIT 2,1
) AS U_DATA3
FROM table1 a
ORDER BY a.PKID
फ़ॉलोअप
@ gliese581g बताते हैं कि बाहरी क्वेरी द्वारा बड़ी संख्या में पंक्तियों के साथ इस दृष्टिकोण के साथ प्रदर्शन समस्याएं हो सकती हैं, क्योंकि चयन सूची में प्रत्येक सबक्वायरी बाहरी क्वेरी में लौटाई गई प्रत्येक पंक्ति के लिए निष्पादित हो जाती है।
यह बिना कहे चला जाना चाहिए कि यह दृष्टिकोण एक सूचकांक के लिए कहता है:
ON table2 (PKID_FROM_TABLE_1, U_DATA)
-या, कम से कम-
ON table2 (PKID_FROM_TABLE_1)
यह संभावना है कि बाद वाला सूचकांक पहले से मौजूद है, अगर कोई विदेशी कुंजी परिभाषित है। पूर्व इंडेक्स क्वेरी को पूरी तरह से इंडेक्स पेज ("इंडेक्स का उपयोग करना") से पूरी तरह से संतुष्ट होने की अनुमति देगा, बिना सॉर्ट ऑपरेशन ("फाइलों का उपयोग करना") की आवश्यकता के बिना।
@glies581g यह इंगित करने के लिए बिल्कुल सही है कि इस दृष्टिकोण का प्रदर्शन "बड़े" सेट पर समस्याग्रस्त हो सकता है।