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

PostgreSQL श्रृंखला को गलत तरीके से क्यों संयोजित करता है?

यह एक विचित्र बात है कि SELECT में बुलाए जाने पर कितने सेट-रिटर्निंग फ़ंक्शन निष्पादित किए जाते हैं -सूची। आप उम्मीद करते हैं कि परिणाम दोनों का क्रॉस उत्पाद होगा, लेकिन ऐसा नहीं है कि यह कैसे काम करता है। यह वास्तव में दोनों की पंक्तियों की संख्या का सबसे कम सामान्य गुणक है।

देखें:

तुलना करें:

test=>     SELECT generate_series(1,3) aval, generate_series(1,4) bval;
 aval | bval 
------+------
    1 |    1
    2 |    2
    3 |    3
    1 |    4
    2 |    1
    3 |    2
    1 |    3
    2 |    4
    3 |    1
    1 |    2
    2 |    3
    3 |    4
(12 rows)

test=>     SELECT generate_series(1,3) aval, generate_series(1,3) bval;
 aval | bval 
------+------
    1 |    1
    2 |    2
    3 |    3
(3 rows)

इस कारण से, PostgreSQL 9.2 और इसके बाद के संस्करण पर आपको LATERAL . का उपयोग करना चाहिए वे क्वेरी जहां आप FROM . में सेट-रिटर्निंग फ़ंक्शन का आह्वान करते हैं खंड:

test=>     SELECT aval, bval FROM generate_series(1,3) aval CROSS JOIN LATERAL generate_series(1,3) bval;
 aval | bval 
------+------
    1 |    1
    1 |    2
    1 |    3
    2 |    1
    2 |    2
    2 |    3
    3 |    1
    3 |    2
    3 |    3
(9 rows)

test=>     SELECT aval, bval FROM generate_series(1,3) aval CROSS JOIN LATERAL generate_series(1,4) bval;
 aval | bval 
------+------
    1 |    1
    1 |    2
    1 |    3
    1 |    4
    2 |    1
    2 |    2
    2 |    3
    2 |    4
    3 |    1
    3 |    2
    3 |    3
    3 |    4
(12 rows)

पुराने संस्करणों पर आप एक सेलेक्ट टर्म में एक से अधिक SRF होने से बचने के लिए सबक्वेरी-इन-FROM का उपयोग कर सकते हैं:

test=> SELECT generate_series(1,3) aval, bval FROM (SELECT generate_series(1,4)) AS x(bval);
 aval | bval 
------+------
    1 |    1
    2 |    1
    3 |    1
    1 |    2
    2 |    2
    3 |    2
    1 |    3
    2 |    3
    3 |    3
    1 |    4
    2 |    4
    3 |    4
(12 rows)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सीक्वेलाइज़ माइग्रेशन और इनिशियलाइज़ेशन को संभालने के लिए वर्कफ़्लो?

  2. त्रुटि:डुप्लिकेट कुंजी मान postgreSQL में अद्वितीय बाधा का उल्लंघन करता है

  3. मेरे स्थानीय postgresql डेटाबेस url का रूप क्या है?

  4. PostgreSQL में दशमलव बिंदु के बाद गैर-शून्य रिकॉर्ड प्राप्त करें

  5. लगातार दिनों की 'लकीर' में पंक्तियों में चल रही गिनती कैसे जोड़ें