यह MySQL उपयोगकर्ताओं के लिए एक सामान्य त्रुटि है। MySQL 5.7 में, डिफ़ॉल्ट रूप से डेटाबेस मानक शब्दार्थ को लागू करता है जिसे अधिकांश अन्य SQL डेटाबेस वर्षों से लागू कर रहे हैं।
नियम यह है कि आपकी चयन-सूची का प्रत्येक स्तंभ निम्न में से एक होना चाहिए:
- ग्रुप बाय क्लॉज में नामित; यानी यह वही है जिसे आप समूहित कर रहे हैं।
- मिन, MAX (), SUM (), GROUP_CONCAT (), आदि जैसे समग्र फ़ंक्शन के अंदर
- कार्यात्मक रूप से उस कॉलम पर निर्भर करता है जिसके द्वारा आप समूहित कर रहे हैं (यह MySQL का मानक SQL व्यवहार का विस्तार है, और अन्य SQL डेटाबेस आवश्यक रूप से इसका समर्थन नहीं करते हैं)।
आपकी क्वेरी में (मैं आपके SELECT *
. का विस्तार करूँगा ):
select user_id, feature_key, feature_value from user_features
where user_id = 1
group by feature_key
आप फीचर_की के आधार पर समूह बना रहे हैं, लेकिन इसका मतलब है कि अन्य कॉलम मेरे द्वारा ऊपर वर्णित नियमों का पालन नहीं करते हैं।
इसे ठीक करने का तरीका यहां दिया गया है:
select MAX(user_id), feature_key, GROUP_CONCAT(feature_value)
from user_features
where user_id = 1
group by feature_key
MAX(user_id)
. का उपयोग करना बेमानी लग सकता है चूंकि WHERE क्लॉज कंडीशन के आधार पर केवल एक ही वैल्यू संभव है। लेकिन कोई नुकसान भी नहीं है। MIN(user_id)
भी काम करेगा।
इसी त्रुटि पर मेरे पिछले उत्तर भी देखें: