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

MySQL:SQL त्रुटि:1140, SQLState:42000

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 को बंद करें और त्रुटि गायब हो जाना चाहिए।

लिंक आपकी मदद कर सकते हैं

  1. आप MySQL त्रुटियाँ खोज सकते हैं यहां
  2. group-by-functions
  3. stackoverflow.com पर इसी तरह की पोस्ट
  4. एक अन्य फ़ोरम जहां इसी तरह की समस्या पर चर्चा की गई
  5. सर्वर-एसक्यूएल-मोड

अपडेट करें

यह आपकी टिप्पणी का उत्तर है।

But i would like to know more about disabling the Group BY mode in mysql db.  

सर्वर SQL मोड

  • 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 अक्सर पूछे जाने वाले प्रश्न लिंक

  1. ONLY_FULL_GROUP_BY sql मोड अत्यधिक प्रतिबंधात्मक है
  2. sql-mode:केवल मोड के अनुसार पूरा समूह काम नहीं कर रहा है
  3. MySQL 5.0 सामान्य प्रश्न:सर्वर 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. ON DUPLICATE KEY UPDATE के साथ बहुत अधिक ऑटो इंक्रीमेंट

  2. कॉलम नाम निर्दिष्ट किए बिना MySQL अपडेट करें

  3. रेडीस्टेटमेंट क्वेरी में पैरामीटर को अनदेखा करता है:java.sql.SQLException:पैरामीटर इंडेक्स सीमा से बाहर है (1> पैरामीटर की संख्या, जो 0 है)

  4. क्या MySQL का उपयोग करके एकाधिक कॉलम द्वारा ग्रुप करना संभव है?

  5. date_format के साथ mysql तारीख की तुलना