मैं एक एप्लिकेशन (MapServer - http://mapserver.org/ ) का उपयोग कर रहा हूं जो SQL स्टेटमेंट को लपेटता है, ताकि ORDER BY स्टेटमेंट इनर क्वेरी में हो। उदाहरण के लिए
SELECT * FROM (
SELECT ID, GEOM, Name
FROM t
ORDER BY Name
) as tbl
एप्लिकेशन में कई अलग-अलग डेटाबेस ड्राइवर हैं। मैं मुख्य रूप से MS SQL Server ड्राइवर, और SQL Server 2008 का उपयोग करता हूं। यदि कोई ORDER BY किसी उपकुंजी में पाया जाता है, तो यह एक त्रुटि फेंकता है।
MS डॉक्स से (हालाँकि यह SQL Server 2000 के लिए है, यह अभी भी लागू होता है):
जब आप एक दृश्य, एक इनलाइन फ़ंक्शन, एक व्युत्पन्न तालिका, या एक उपकुंजी में एक ORDER BY क्लॉज का उपयोग करते हैं, तो यह आउटपुट के आदेश की गारंटी नहीं देता है। इसके बजाय, ORDER BY क्लॉज का उपयोग केवल यह गारंटी देने के लिए किया जाता है कि शीर्ष ऑपरेटर द्वारा उत्पन्न परिणाम सेट में एक सुसंगत मेकअप हो। ORDER BY क्लॉज केवल ऑर्डर किए गए परिणाम सेट की गारंटी देता है जब इसे सबसे बाहरी चयन कथन में निर्दिष्ट किया जाता है।
हालाँकि पोस्टग्रेज़ (9) और ओरेकल रिटर्न परिणाम में चलने पर उसी प्रकार की क्वेरी - आदेश के रूप में उपकुंजी में परिभाषित की गई है। पोस्टग्रैज में क्वेरी प्लान दिखाता है कि परिणाम छाँटे गए हैं और पोस्टग्रिज़ जारी नोटों में वे आइटम शामिल हैं जो उप-क्रम के आदेशों को दर्शाते हैं:
ऊपरी क्वेरी से मेल खाता होने पर उप-क्रम आदेश से बचें
http://en.wikipedia.org/wiki/Oder_by राज्यों:
हालाँकि कुछ डेटाबेस सिस्टम सबडर्सेल्स में एक ORDER BY क्लॉज़ के विनिर्देशन की अनुमति देते हैं या परिभाषाएँ देखते हैं, वहाँ मौजूदगी का कोई प्रभाव नहीं पड़ता है।
हालाँकि मेरी खुद की क्वेरी योजनाओं की जाँच से:
- SQL Server 2008 किसी उप-क्रम में ORDER BY का समर्थन नहीं करता है
- पोस्टग्रैज 9 एक उप-कक्ष में ORDER BY का समर्थन करता है
- ओरेकल 10 जी एक उपक्वरी में ORDER BY का समर्थन करता है
तो मेरा सवाल यह है कि क्या कोई लिंक है जो आधिकारिक तौर पर पुष्टि कर सकता है या इनकार कर सकता है कि पोस्टग्रैस और ओरेकल एक उप-वर्ग में छंटनी की अनुमति नहीं देते हैं?
ORDER BY
उपकेंद्र में अनावश्यक के रूप में पहचान करेंगे और अनावश्यक छंटाई नहीं करेंगे।