ONLY_FULL_GROUP_BY
के साथ निम्न क्वेरी अमान्य है सक्षम। पहला अमान्य है क्योंकि चयन सूची में नाम GROUP BY
. में नहीं है खंड
mysql> SELECT name, MAX(age) FROM t;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...)
यदि कोई ग्रुप बाय क्लॉज नहीं है तो कोई ग्रुप कॉलम अवैध नहीं है
ठीक काम करने के लिए आप क्वेरी को
. के रूप में फिर से लिख सकते हैंmysql> SELECT name, MAX(age) FROM t GROUP BY name;
या
ONLY_FULL_GROUP_BY को बंद करें और त्रुटि गायब हो जाना चाहिए।
लिंक आपकी मदद कर सकते हैं
- आप MySQL त्रुटियाँ खोज सकते हैं यहां
- group-by-functions
- stackoverflow.com पर इसी तरह की पोस्ट
- एक अन्य फ़ोरम जहां इसी तरह की समस्या पर चर्चा की गई
- सर्वर-एसक्यूएल-मोडए>
अपडेट करें
यह आपकी टिप्पणी का उत्तर है।
But i would like to know more about disabling the Group BY mode in mysql db.
-
MySQL सर्वर अलग-अलग SQL मोड में काम कर सकता है, और
sql_mode
के मान के आधार पर अलग-अलग क्लाइंट के लिए इन मोड्स को अलग-अलग तरीके से लागू कर सकता है। सिस्टम चर। यह क्षमता प्रत्येक एप्लिकेशन को सर्वर के ऑपरेटिंग मोड को अपनी आवश्यकताओं के अनुरूप बनाने में सक्षम बनाती है। -
सर्वर स्टार्टअप पर SQL मोड सेट करने के लिए,
--sql-mode="modes"
. का उपयोग करें कमांड लाइन पर विकल्प, याsql-mode="modes"
एक विकल्प फ़ाइल में जैसेmy.cnf (Unix operating systems)
याmy.ini (Windows)
. मोड अल्पविराम द्वारा अलग किए गए विभिन्न मोड की एक सूची है। SQL मोड को स्पष्ट रूप से साफ़ करने के लिए, इसे--sql-mode=""
. का उपयोग करके एक खाली स्ट्रिंग पर सेट करें कमांड लाइन पर, याsql-mode=""
एक विकल्प फ़ाइल में। -
रनटाइम पर SQL मोड बदलने के लिए, एक
. का उपयोग करेंSET [GLOBAL|SESSION] sql_mode='modes'
sql_mode सिस्टम वैरिएबल सेट करने के लिए स्टेटमेंट। वैश्विक चर सेट करने के लिए सुपर विशेषाधिकार की आवश्यकता होती है और उस समय से कनेक्ट होने वाले सभी क्लाइंट के संचालन को प्रभावित करता है। सत्र चर सेट करना केवल वर्तमान क्लाइंट को प्रभावित करता है। कोई भी क्लाइंट किसी भी समय अपना सत्र sql_mode मान बदल सकता है। -
वर्तमान वैश्विक या सत्र sql_mode मान निर्धारित करने के लिए, निम्नलिखित कथनों का उपयोग करें:
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
-
आप sql_mode तालिका देख सकते हैं
I followed the manuals, Added the ONLY_FULL_GROUP_BY in sql-mode
but no difference.
यह MySQL संस्करण के कारण होता है। आपके स्थानीय कंप्यूटर का MySQL संस्करण क्या है?
MySQL संस्करण की जांच कैसे करें?
mysql> SELECT version();
+-----------+
| version() |
+-----------+
| 5.5.28 |
+-----------+
1 row in set (0.00 sec)
परीक्षण के लिए sql_mode ONLY_FULL_GROUP_BY
, मैंने तालिका बनाई patient
दो कॉलम के साथ id, name
और रिकॉर्ड डाला। याद रखें sql_mode ONLY_FULL_GROUP_BY
डिफ़ॉल्ट सेट नहीं है, यदि आप चाहें तो आपको सेट करने की आवश्यकता है।
1)MySQL संस्करण 5.0.45-समुदाय-एनटी
SELECT name, MAX(id) FROM patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
यह विफल रहा, sql_mode को ONLY_FULL_GROUP_BY
पर सेट करने का कोई मतलब नहीं था क्योंकि यह उन गैर-समेकित स्तंभों की अनुमति नहीं देगा जिनका नाम GROUP BY खंड में नहीं है।
2)MySQL संस्करण 5.1.40-समुदाय
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
फिर sql_mode सेट करने के बाद ONLY_FULL_GROUP_BY
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
3)MySQL संस्करण 5.5.28
mysql> SELECT name, MAX(id) from patient;
+----------+--------+
| MAX(id) | name |
+----------+--------+
| 33 | aniket |
+----------+--------+
1 row in set (0.03 sec)
फिर sql_mode सेट करने के बाद ONLY_FULL_GROUP_BY
mysql> set sql_mode = 'ONLY_FULL_GROUP_BY';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT name, MAX(id) from patient;
ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
निष्कर्ष
जैसा कि आप देख सकते हैं कि संस्करण 5.0.45 पर क्वेरी विफल हो गई, और MySQL संस्करण 5.1.10(निश्चित नहीं)
GROUP BY
. के बिना क्वेरी sql_mode के बावजूद विफल रहता है ONLY_FULL_GROUP_BY
सेट करें या नहीं।
कुछ दिलचस्प बग और sql_mode अक्सर पूछे जाने वाले प्रश्न लिंक
- ONLY_FULL_GROUP_BY sql मोड अत्यधिक प्रतिबंधात्मक है
- sql-mode:केवल मोड के अनुसार पूरा समूह काम नहीं कर रहा है
- MySQL 5.0 सामान्य प्रश्न:सर्वर SQL मोडए>