आपके द्वारा वर्णित व्यवहार तब होता है जब आप ORDER BY
एक अभिव्यक्ति जो SELECT
खंड में मौजूद नहीं है। एसक्यूएल मानक ऐसी क्वेरी की अनुमति नहीं देता है लेकिन MySQL कम सख्त है और इसे अनुमति देता है।
SELECT DISTINCT colum1, column2
FROM table1
WHERE ...
ORDER BY column3
मान लीजिए कि तालिका table1
की सामग्री में है:
एक उदाहरण की कोशिश करते हैं
id | column1 | column2 | column3
----+---------+---------+---------
1 | A | B | 1
2 | A | B | 5
3 | X | Y | 3
ORDER BY
खंड के बिना
, ऊपर क्वेरी दो रिकॉर्ड (ORDER BY
के आदेश के बिना निम्नलिखित गारंटी नहीं है):
column1 | column2
---------+---------
A | B
X | Y
लेकिन ORDER BY column3
के साथ आदेश भी गारंटी नहीं है।
DISTINCT
खंड SELECT
खंड में मौजूद अभिव्यक्तियों के मूल्यों पर कार्य करता है। यदि पंक्ति # 1 को पहले संसाधित किया जाता है तो (A
, B
) परिणाम सेट में रखा गया है और यह पंक्ति # 1 से जुड़ा हुआ है। फिर, जब पंक्ति # 2 संसाधित हो जाती है, तो SELECT
अभिव्यक्तियों के मान रिकॉर्ड (A
, B
) उत्पन्न करते हैं जो पहले से ही परिणाम सेट में है। DISTINCT
की वजह से यह गिरा दिया गया है। पंक्ति # 3 उत्पन्न करता है (X
, Y
) जिसे परिणाम सेट में भी रखा जाता है। फिर, ORDER BY column3
खंड रिकॉर्ड सेट में क्रमबद्ध किया गया है (A
, B
), (X
, Y
)।
लेकिन अगर पंक्ति # 2 से पहले # 1 पंक्ति तो संसाधित किया जाता है, एक ही पिछले पैराग्राफ में अवगत कराया तर्क के बाद, परिणाम सेट में रिकॉर्ड के रूप में (X
, Y
), (A
, B
) हल कर रहे हैं।
डेटाबेस इंजन पर कोई नियम लागू नहीं होता है, जब यह क्वेरी चलाता है तो पंक्तियों को संसाधित करता है। डेटाबेस किसी भी क्रम में पंक्तियों को संसाधित करने के लिए स्वतंत्र है, यह मानता है कि यह प्रदर्शन के लिए बेहतर है।
आपकी क्वेरी अमान्य SQL है और तथ्य यह है कि यह एक ही इनपुट डेटा का उपयोग करके अलग-अलग परिणाम लौटा सकता है।
आप कौन से प्रश्न चलाने की कोशिश कर रहे हैं? – srivani
@srivani: तालिका से अलग आईडी का चयन करें जहां id2 = 12312 आदेश समय के अनुसार आदेश। – insomiac
मुझे पता है कि यह बहुत देर हो चुकी है लेकिन अभी तक कोई स्वीकार्य उत्तर नहीं है, इसलिए मैं जानना चाहता हूं कि ओपी अभी भी किसी ऐसे उत्तर के लिए उत्तर देना चाहता है जो दिए गए उत्तरों में शामिल नहीं है? –