MySQL डिजाइनरों ने अपने गैर-मानक एक्सटेंशन को GROUP BY
. में डाल दिया है विकास को आसान और कुछ प्रश्नों को अधिक कुशल बनाने के प्रयास में।
यहाँ उनका तर्क है।
https://dev.mysql.com/doc/refman/8.0/hi/group-by-handling.html
एक सर्वर मोड है जिसे ONLY_FULL_GROUP_BY
. कहा जाता है जो गैरमानक एक्सटेंशन को निष्क्रिय कर देता है। आप इस कथन का उपयोग करके इस मोड को सेट कर सकते हैं।
SET SESSION SQL_MODE='ONLY_FULL_GROUP_BY'
यहाँ उस पृष्ठ से एक उद्धरण दिया गया है, जिसमें ज़ोर दिया गया है।
<ब्लॉकक्वॉट>
अगर ONLY_FULL_GROUP_BY
अक्षम है, GROUP BY
. के मानक SQL उपयोग के लिए एक MySQL एक्सटेंशन चयन सूची की अनुमति देता है, HAVING
शर्त, या ORDER BY
गैर-समेकित स्तंभों को संदर्भित करने के लिए सूची, भले ही स्तंभ कार्यात्मक रूप से GROUP BY
पर निर्भर न हों कॉलम... इस मामले में, सर्वर प्रत्येक समूह से कोई भी मान चुनने के लिए स्वतंत्र है , इसलिए जब तक वे समान न हों, चुने गए मान गैर-निर्धारिती . हैं , जो शायद वह नहीं है जो आप चाहते हैं।
यहां महत्वपूर्ण शब्द है गैर नियतात्मक। इसका क्या मतलब है? इसका मतलब है यादृच्छिक, लेकिन बदतर। यदि सर्वर ने यादृच्छिक मान चुना है, तो इसका मतलब है कि यह अलग-अलग प्रश्नों में अलग-अलग मान लौटाएगा, इसलिए जब आप अपने सॉफ़्टवेयर का परीक्षण करते हैं तो आपके पास समस्या को पकड़ने का मौका होता है। लेकिन गैर नियतात्मक इस संदर्भ में इसका अर्थ है कि सर्वर हर बार एक ही मान चुनता है, जब तक वह ऐसा नहीं करता।
यह अपने द्वारा चुने गए मूल्य को क्यों बदल सकता है? एक सर्वर अपग्रेड एक कारण है। तालिका आकार में परिवर्तन एक और हो सकता है। मुद्दा यह है कि सर्वर जो भी मूल्य चाहता है उसे वापस करने के लिए स्वतंत्र है।
काश SQL सीखने वाले नए लोग यह ONLY_FULL_GROUP_BY
सेट करते हैं तरीका; वे अपने प्रश्नों से बहुत अधिक अनुमानित परिणाम प्राप्त करेंगे, और सर्वर गैर-नियतात्मक प्रश्नों को अस्वीकार कर देगा।