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

PostgreSQL खाली सरणी के साथ अननेस्ट

select id, 
       case 
         when int_values is null or array_length(int_values,1) is null then null
         else unnest(int_values)
       end as value
from the_table;

(ध्यान दें कि मैंने कॉलम का नाम बदल दिया values से int_values values . के रूप में एक आरक्षित शब्द है और इसे कॉलम नाम के रूप में इस्तेमाल नहीं किया जाना चाहिए)।

SQLFiddle:http://sqlfiddle.com/#!1/a0bb4/1

Postgres 10 unnest() . का उपयोग करने की अनुमति नहीं देता है उस तरह और अधिक।

आपको लेटरल जॉइन का उपयोग करने की आवश्यकता है:

select id, t.i
from the_table
   cross join lateral unnest(coalesce(nullif(int_values,'{}'),array[null::int])) as t(i);

ऑनलाइन उदाहरण:http://rextester.com/ALNX23313

क्रॉस जॉइन के बजाय लेफ्ट जॉइन का उपयोग करते समय इसे और भी सरल बनाया जा सकता है:

select id, t.i
from the_table
 left join lateral unnest(int_values) as t(i) on true;

ऑनलाइन उदाहरण:http://rextester.com/VBO52351



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL, दो पंक्तियों में कुछ कॉलम का डेटा स्वैप करें

  2. %TYPE . का उपयोग करके PostgreSQL में समग्र प्रकार के चर घोषित करें

  3. डीजल सीएलआई उपकरण चलाते समय सामान्य नहीं मिला

  4. समानांतर में कई सरणियों को खोलना

  5. PostgreSQL में यूनिक्स टाइमस्टैम्प लौटाएं