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

क्या ORDER BY DISTINCT से पहले या बाद में लागू होता है?

समझने के लिए दो बातें:

  1. सामान्यतया, परिणामसेट अनियंत्रित होते हैं। जब तक आप ORDER BY निर्दिष्ट नहीं करते हैं खंड; जिस हद तक आप गैर-सख्त आदेश निर्दिष्ट करते हैं (अर्थात ORDER BY गैर-अद्वितीय स्तंभों पर), जिस क्रम में उस क्रम के तहत समान रिकॉर्ड परिणाम सेट के भीतर दिखाई देते हैं, वह अपरिभाषित है।

    मुझे संदेह है कि आप ऐसा गैर-सख्त आदेश निर्दिष्ट कर रहे हैं, जो आपकी समस्याओं की जड़ है:ORDER BY निर्दिष्ट करके सुनिश्चित करें कि आपका आदेश सख्त है कॉलम के एक सेट पर जो प्रत्येक रिकॉर्ड को विशिष्ट रूप से पहचानने के लिए पर्याप्त है जिसके लिए आप परिणामसेट में इसकी अंतिम स्थिति की परवाह करते हैं।

  2. DISTINCT GROUP BY . का उपयोग कर सकते हैं , जिसके कारण परिणामों को समूहीकृत स्तंभों द्वारा क्रमित किया जाता है; यानी, SELECT DISTINCT a, b, c FROM t एक परिणाम सेट तैयार करेगा जो ऐसा प्रतीत होता है जैसे ORDER BY a, b, c लागू किया है। फिर से, अपनी आवश्यकताओं को पूरा करने के लिए पर्याप्त रूप से सख्त आदेश निर्दिष्ट करने से यह प्रभाव समाप्त हो जाएगा।

आपके अपडेट के बाद, उपरोक्त मेरे बिंदु #2 को ध्यान में रखते हुए, यह स्पष्ट है कि परिणामों को समूहीकृत करने का प्रभाव DISTINCT प्राप्त करने के लिए है इसके बाद गैर-समूहीकृत कॉलम p.id . द्वारा ऑर्डर करना असंभव बना देता है; इसके बजाय, आप चाहते हैं:

SELECT   t.*
FROM     Threads t INNER JOIN Posts p ON t.id = p.threadid
GROUP BY t.id
ORDER BY MAX(p.id) DESC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. वर्डप्रेस कैसे स्थापित करें:सर्वर सॉफ्टवेयर

  2. एक खाली परिणाम की जाँच (PHP, PDO, और MySQL)

  3. मैं एक व्युत्पन्न तालिका क्वेरी को और कैसे अनुकूलित कर सकता हूं जो जॉइन समकक्ष से बेहतर प्रदर्शन करती है?

  4. मैं इसे बाइनरी लॉग में लिखे बिना MYSQL में एक क्वेरी कैसे चला सकता हूँ?

  5. mysql में sql जॉइन का उपयोग कैसे करें?