ORDER BY id DESC
के कारण खंड, क्वेरी को ऐसा माना जाता है जैसे कि यह लिखा गया था:
SELECT DISTINCT name, id
FROM table
ORDER BY id DESC;
सिवाय इसके कि id
कॉलम उपयोगकर्ता (आप) को वापस नहीं किए जाते हैं। परिणाम सेट में id
. शामिल होना चाहिए इसके द्वारा आदेश देने में सक्षम होने के लिए। जाहिर है, इस परिणाम सेट में चार पंक्तियाँ हैं, इसलिए वही लौटाया जाता है। (नैतिक:छिपे हुए कॉलम द्वारा ऑर्डर न करें - जब तक आप यह नहीं जानते कि यह आपकी क्वेरी के लिए क्या करने जा रहा है।)
कोशिश करें:
SELECT DISTINCT name
FROM table
ORDER BY name;
(डीईएससी के साथ या उसके बिना)। वह केवल दो पंक्तियों को लौटाएगा।
अगर आपको एक id
जानना है प्रत्येक नाम के लिए, विचार करें:
SELECT name, MIN(id)
FROM table
GROUP BY name
ORDER BY MIN(id) DESC;
आप समान रूप से अच्छे प्रभाव के लिए MAX का उपयोग कर सकते हैं।
यह सब MySQL सहित सभी SQL डेटाबेस पर लागू होता है। MySQL के कुछ नियम हैं जो आपको कुछ गैर-नियतात्मक परिणामों के साथ GROUP BY क्लॉज को छोड़ने की अनुमति देते हैं। मैं इस सुविधा का उपयोग न करने की सलाह देता हूं।
एक लंबे समय के लिए (शायद अब भी) SQL मानक ने आपको उन स्तंभों द्वारा ऑर्डर करने की अनुमति नहीं दी जो चयन-सूची में नहीं थे, ठीक इस तरह के भ्रम से बचने के लिए। जब परिणाम सेट में ऑर्डरिंग डेटा शामिल नहीं होता है, तो परिणाम सेट के क्रम को 'आवश्यक ऑर्डरिंग' कहा जाता है; यदि परिणाम सेट में सभी ऑर्डरिंग कॉलम दिखाई देते हैं, तो यह 'अनावश्यक ऑर्डरिंग' है क्योंकि आपके पास डेटा को स्वयं ऑर्डर करने के लिए पर्याप्त डेटा है।