10 या नए को पोस्ट करें
छोटे सेट (सेटों) के लिए शून्य मान जोड़ता है। डेमो के साथ generate_series()
:
SELECT generate_series( 1, 2) AS row2
, generate_series(11, 13) AS row3
, generate_series(21, 24) AS row4;
row2 | row3 | row4 -----+------+----- 1 | 11 | 21 2 | 12 | 22 null | 13 | 23 null | null | 24
यहां dbfiddle
पोस्टग्रेज के लिए मैनुअल 10 :
<ब्लॉकक्वॉट>
यदि क्वेरी की चयन सूची में एक से अधिक सेट-रिटर्निंग फ़ंक्शन हैं, तो व्यवहार वैसा ही है जैसा आपको फ़ंक्शन को एक LATERAL ROWS FROM( ... )
में डालने से मिलता है। FROM
-क्लॉज आइटम। अंतर्निहित क्वेरी से फ़ोरैच पंक्ति, प्रत्येक फ़ंक्शन से पहले परिणाम का उपयोग करके एक आउटपुट पंक्ति होती है, फिर दूसरे परिणाम का उपयोग करके एक आउटपुट पंक्ति, और इसी तरह। यदि कुछ सेट-रिटर्निंग फ़ंक्शन दूसरों की तुलना में कम आउटपुट उत्पन्न करते हैं, तो लापता डेटा के लिए शून्य मानों को प्रतिस्थापित किया जाता है, ताकि एक अंतर्निहित पंक्ति के लिए उत्सर्जित पंक्तियों की कुल संख्या सेट-रिटर्निंग फ़ंक्शन के समान हो जो सबसे अधिक आउटपुट उत्पन्न करती है। इस प्रकार सेट-रिटर्निंग फ़ंक्शन "लॉकस्टेप में" चलते हैं जब तक कि वे सभी समाप्त नहीं हो जाते हैं, और फिर निष्पादन अगली अंतर्निहित पंक्ति के साथ जारी रहता है।
यह परंपरागत रूप से अजीब व्यवहार को समाप्त करता है।
9.6 या पुराने पोस्ट को पोस्ट करें
परिणाम पंक्तियों की संख्या (कुछ आश्चर्यजनक रूप से!) सबसे कम सामान्य गुणज . है सभी सेटों में से SELECT
सूची। (केवल CROSS JOIN
की तरह काम करता है यदि सभी सेट-साइज के लिए कोई सामान्य भाजक नहीं है!) डेमो:
SELECT generate_series( 1, 2) AS row2
, generate_series(11, 13) AS row3
, generate_series(21, 24) AS row4;
row2 | row3 | row4 -----+------+----- 1 | 11 | 21 2 | 12 | 22 1 | 13 | 23 2 | 11 | 24 1 | 12 | 21 2 | 13 | 22 1 | 11 | 23 2 | 12 | 24 1 | 13 | 21 2 | 11 | 22 1 | 12 | 23 2 | 13 | 24
यहां dbfiddle
Postgres के लिए मैनुअल में प्रलेखित 9.6 अध्याय SQL फ़ंक्शन रिटर्निंग सेट , इससे बचने की सिफारिश के साथ:
<ब्लॉकक्वॉट>
नोट:FROM
के बजाय, चयन सूची में सेट-रिटर्निंग फ़ंक्शंस का उपयोग करने में मुख्य समस्या खंड, यह है कि एक ही चयन सूची में एक से अधिक सेट-रिटर्निंग फ़ंक्शन डालने से व्यवहार नहीं होता है। (यदि आप ऐसा करते हैं तो आपको वास्तव में क्या मिलता है, प्रत्येक सेट-रिटर्निंग फ़ंक्शन द्वारा उत्पादित पंक्तियों की संख्या के कम से कम सामान्य गुणक के बराबर कई आउटपुट पंक्तियाँ होती हैं। ) LATERAL
कई सेट-रिटर्निंग फ़ंक्शंस को कॉल करते समय सिंटैक्स बिना आश्चर्यजनक परिणाम उत्पन्न करता है, और आमतौर पर इसके बजाय उपयोग किया जाना चाहिए।
बोल्ड जोर मेरा।
एक एकल सेट-रिटर्निंग फ़ंक्शन ठीक है (लेकिन अभी भी FROM
. में क्लीनर है list), लेकिन एक ही SELECT
. में एकाधिक सूची अब हतोत्साहित है। हमारे पास LATERAL
. होने से पहले यह एक उपयोगी सुविधा थी जुड़ता है। अब यह केवल ऐतिहासिक गिट्टी है।
संबंधित:
- PostgreSQL में समानांतर अननेस्ट () और सॉर्ट क्रम
- एकाधिक सरणियों को समानांतर में अननेस्ट करें
- लेटरल जॉइन और PostgreSQL में सबक्वेरी में क्या अंतर है?