Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL अलग का चयन करें काम नहीं करता

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 मानक ने आपको उन स्तंभों द्वारा ऑर्डर करने की अनुमति नहीं दी जो चयन-सूची में नहीं थे, ठीक इस तरह के भ्रम से बचने के लिए। जब परिणाम सेट में ऑर्डरिंग डेटा शामिल नहीं होता है, तो परिणाम सेट के क्रम को 'आवश्यक ऑर्डरिंग' कहा जाता है; यदि परिणाम सेट में सभी ऑर्डरिंग कॉलम दिखाई देते हैं, तो यह 'अनावश्यक ऑर्डरिंग' है क्योंकि आपके पास डेटा को स्वयं ऑर्डर करने के लिए पर्याप्त डेटा है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:उन कुंजियों का चयन करें जो एक तालिका में मौजूद नहीं हैं

  2. प्लगइन 'फेडरेटेड' अक्षम है

  3. MySQL क्वेरी का परीक्षण

  4. व्युत्पन्न तालिकाओं के कारण इकाई की रूपरेखा धीमी है

  5. सामान्य एस्केप फ़ंक्शंस का उपयोग करने से एक MySQL तैयार कथन का अधिक सुरक्षित उपयोग क्यों कर रहा है?