SQL मोड से ONLY_FULL_GROUP_BY हटाकर डिसेबल करें
ONLY_FULL_GROUP_BY SQL मोड (MySQL 5.7+ में डिफ़ॉल्ट रूप से सक्षम) उन क्वेरी को अस्वीकार करता है जहां SELECT सूची, HAVING, या ORDER BY में नॉन-एग्रीगेट कॉलम होते हैं जो GROUP BY में नहीं होते या फंक्शनली डिपेंडेंट नहीं होते।
वर्तमान SQL मोड जांचें
mysql> SELECT @@sql_mode;
सत्र के लिए डिसेबल करें (वर्तमान कनेक्शन)
mysql> SET sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
वैश्विक रूप से डिसेबल करें (सभी नए कनेक्शन के लिए, रीस्टार्ट तक स्थायी)
mysql> SET GLOBAL sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
स्थायी रूप से डिसेबल करें (कॉन्फ़िगरेशन फ़ाइल में)
my.cnf या my.ini में [mysqld] अनुभाग के तहत जोड़ें:
[mysqld] sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
फिर MySQL सेवा रीस्टार्ट करें।
उदाहरण आउटपुट
mysql> SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); Query OK, 0 rows affected (0.04 sec)
चेतावनी
- ONLY_FULL_GROUP_BY डिसेबल करने से गलत/अनिश्चित परिणाम वाली क्वेरी चल सकती हैं।
- बेहतर अभ्यास: क्वेरी को ठीक करें ताकि सभी नॉन-एग्रीगेट कॉलम GROUP BY में हों या एग्रीगेट फ़ंक्शन का उपयोग करें।
- MySQL 8.0 में,
ANY_VALUE()फ़ंक्शन का उपयोग जानबूझकर अनिश्चित चयन के लिए करें।
सही क्वेरी उदाहरण
-- गलत (ONLY_FULL_GROUP_BY के साथ) SELECT department, name FROM employees GROUP BY department; -- सही SELECT department, ANY_VALUE(name) FROM employees GROUP BY department; -- या SELECT department, MAX(name) FROM employees GROUP BY department; -- या SELECT department, GROUP_CONCAT(name) FROM employees GROUP BY department;