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

एसक्यूएल क्वेरी पोस्टग्रेज 9.4 से नेस्टेड जेसन बनाएं

परिणामस्वरूप पदानुक्रमित संरचना प्राप्त करने के लिए आपको एक पदानुक्रमित क्वेरी बनाना चाहिए।

आप चाहते हैं कि एक ही json ऑब्जेक्ट में कई लोग हों, इसलिए <का उपयोग करें। कोड>json_agg() एक जेसन सरणी में व्यक्तियों को इकट्ठा करने के लिए। समान रूप से, एक व्यक्ति के पास कई कारें हो सकती हैं और आपको एक व्यक्ति से संबंधित कारों को एक जेसन सरणी में रखना चाहिए। यही बात कारों और पहियों पर भी लागू होती है।

select
    json_build_object(
        'persons', json_agg(
            json_build_object(
                'person_name', p.name,
                'cars', cars
            )
        )
    ) persons
from person p
left join (
    select 
        personid,
        json_agg(
            json_build_object(
                'carid', c.id,    
                'type', c.type,
                'comment', 'nice car', -- this is constant
                'wheels', wheels
                )
            ) cars
    from
        car c
        left join (
            select 
                carid, 
                json_agg(
                    json_build_object(
                        'which', w.whichone,
                        'serial number', w.serialnumber
                    )
                ) wheels
            from wheel w
            group by 1
        ) w on c.id = w.carid
    group by personid
) c on p.id = c.personid;

(स्वरूपित) परिणाम:

{
    "persons": [
        {
            "person_name": "Johny",
            "cars": [
                {
                    "carid": 1,
                    "type": "Toyota",
                    "comment": "nice car",
                    "wheels": [
                        {
                            "which": "front",
                            "serial number": 11
                        },
                        {
                            "which": "back",
                            "serial number": 12
                        }
                    ]
                },
                {
                    "carid": 2,
                    "type": "Fiat",
                    "comment": "nice car",
                    "wheels": [
                        {
                            "which": "front",
                            "serial number": 21
                        },
                        {
                            "which": "back",
                            "serial number": 22
                        }
                    ]
                }
            ]
        },
        {
            "person_name": "Freddy",
            "cars": [
                {
                    "carid": 3,
                    "type": "Opel",
                    "comment": "nice car",
                    "wheels": [
                        {
                            "which": "front",
                            "serial number": 3
                        }
                    ]
                }
            ]
        }
    ]
}

यदि आप नेस्टेड व्युत्पन्न तालिकाओं से परिचित नहीं हैं तो आप सामान्य तालिका अभिव्यक्तियों का उपयोग कर सकते हैं। यह संस्करण दर्शाता है कि क्वेरी को सबसे नेस्टेड ऑब्जेक्ट से उच्चतम स्तर की ओर शुरू किया जाना चाहिए:

with wheels as (
    select 
        carid, 
        json_agg(
            json_build_object(
                'which', w.whichone,
                'serial number', w.serialnumber
            )
        ) wheels
    from wheel w
    group by 1
),
cars as (
    select 
        personid,
        json_agg(
            json_build_object(
                'carid', c.id,    
                'type', c.type,
                'comment', 'nice car', -- this is constant
                'wheels', wheels
                )
            ) cars
    from car c
    left join wheels w on c.id = w.carid
    group by c.personid
)
select
    json_build_object(
        'persons', json_agg(
            json_build_object(
                'person_name', p.name,
                'cars', cars
            )
        )
    ) persons
from person p
left join cars c on p.id = c.personid;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्प्रिंग डेटा के साथ दिनांक ASC के अनुसार आदेश

  2. PostgreSQL में किसी तालिका की पंक्ति गणना खोजने का तेज़ तरीका

  3. [टेम्पलेट], [एन्कोडिंग], [स्वामी] और एक .sql फ़ाइल के साथ बैच फ़ाइल का उपयोग करके पोस्टग्रेज़ डेटाबेस बनाएँ

  4. असंवेदनशील मामले में मैं अपने डेटाबेस के सभी कॉलम को कैसे परिवर्तित कर सकता हूं?

  5. वास्तविक तालिका से पंक्तियों को हटाने से पहले संबंधित तालिकाओं से पंक्तियों को हटाने के लिए ट्रिगर करें