sql - SQLite3 Doesn't Produce an Aggregation Error on Malformed/Indeterminate Queries? -
कई अन्य RDBMS की तुलना में एकत्रीकरण के साथ व्यवहार करते समय SQLite अलग व्यवहार करता है निम्न तालिका और मूल्यों पर विचार करें:
तालिका foo (एक int, b int) बनाएँ; फू (ए, बी) मानों (1, 10) में डालें; फू (ए, बी) मूल्यों (2, 11) में डालें; फू (ए, बी) मानों (3, 12) में डालें;
यदि मैं इसे इस प्रकार पूछता हूं:
एक का चयन करें, group_concat (b) foo से;
आम तौर पर, मैं एक त्रुटि प्राप्त करने की अपेक्षा करता हूं, इस तथ्य के कारण कि मैंने 'ग्रुप बाय क्लॉज' में कॉलम 'ए' को शामिल नहीं किया है। नीचे एसक्यूएल सर्वर द्वारा उत्पन्न त्रुटि है (पोस्टग्रेएसक्यूएल कुछ इसी तरह का उत्सर्जित करता है)।
कॉलम 'foo.a' चयन सूची में अमान्य है क्योंकि यह एक समग्र फ़ंक्शन या में शामिल नहीं है खंड द्वारा खंड
दूसरी ओर, SQLite, इसके साथ ही चला जाता है और इस परिणाम का उत्पादन करता है:
3 | 10,11,12
< / पूर्व>यह क्या अच्छा है? कॉलम 'ए' के लिए मूल्य कैसे उठाया? अगर हम एक और पंक्ति जोड़ते हैं, तो इसमें क्या लगता है कि इसमें कोई पैटर्न होता है, और शायद हम अस्थायी रूप से यह कह सकते हैं कि यह सबसे हाल ही में जोड़ी हुई पंक्ति का उपयोग कर रहा है, हालांकि यह बस अनिश्चित हो सकता है।
sqlite & gt ; फू (ए, बी) मूल्यों (2, 13) में डालें; SQLite & gt; एक का चयन करें, group_concat (बी) foo से; 2 | 10,11,12,13
यह मेरे लिए एक बग जैसा लगता है, लेकिन मैं सोच रहा हूं कि यहां हमारे डेटाबेस विशेषज्ञों के बारे में क्या कहना है।
(मैं उबंटू पर SQLite संस्करण 3.6.16 का उपयोग कर रहा हूं।)
यह मामलों में उपयोगी व्यवहार है जहां आप एकाधिक समूहीकृत स्तंभों का चयन कर रहे हैं लेकिन समूहिंग के लिए केवल एक कॉलम का परीक्षण करने के लिए आपको केवल क्वेरी इंजन की आवश्यकता है उदाहरण के लिए इसे लें:
ऑर्डर और ऑर्डर देना तालिका।
SELECT O.OrderID, O.OrderDate, SUM (OD.Price * OD.Quantity) कुल मूल्य से ऑर्डर ओ नैटरल जॉइन ऑर्डर, ओ ओडरआईडी
द्वारा ओडी ग्रुप का विवरण। अन्य डेटाबेस में, हमें समूह में ऑर्डरियड और ऑर्डर डेट दोनों को शामिल करना होगा। डेटाबेस तब दोनों स्तंभों द्वारा समूह करेगा, जो इस मामले में बेमानी है। केवल ऑर्डरियड पर समूहबद्ध करके, हमें अधिक परिणाम और कम कोड वाले परिणाम मिलते हैं।
Comments
Post a Comment