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

एक क्वेरी में एकाधिक पंक्तियों को अपडेट करें लेकिन हम जिस इनपुट की अपेक्षा कर रहे हैं वह एकाधिक डेटा के जेसन ऑब्जेक्ट से है

आप json दस्तावेज़ के आधार पर बल्क इंसर्ट कर सकते हैं। आपको दस्तावेज़ को पुन:स्वरूपित करना चाहिए क्योंकि प्रश्न में दिखाया गया प्रारूप अजीब और अव्यावहारिक है।

पूर्ण कार्य उदाहरण:

create table example(id int primary key, email text, last_name text, first_name text);

with jsondata(jdata) as (
    values
    (
    '[
        {"id": 1, "email": "[[email protected]]", "first_name": "John", "last_name": "Doe"},
        {"id": 2, "email": "[[email protected]]", "first_name": "Robert", "last_name": "Duncan"},
        {"id": 3, "email": "[[email protected]]", "first_name": "Ram", "last_name": "Das"},
        {"id": 4, "email": "[[email protected]]", "first_name": "Albert", "last_name": "Pinto"},
        {"id": 5, "email": "[[email protected]]", "first_name": "Robert", "last_name": "Peter"},
        {"id": 6, "email": "[[email protected]]", "first_name": "Christian", "last_name": "Lint"},
        {"id": 7, "email": "[[email protected]]", "first_name": "Mike", "last_name": "Hussey"},
        {"id": 8, "email": "[[email protected]]", "first_name": "Ralph", "last_name": "Hunter"}
    ]'::jsonb)
)

insert into example 
select (elem->>'id')::int, elem->>'email', elem->>'last_name', elem->>'first_name'
from jsondata,
jsonb_array_elements(jdata) as elem;

नतीजा:

select *
from example

 id |     email     | last_name | first_name 
----+---------------+-----------+------------
  1 | [[email protected]] | Doe       | John
  2 | [[email protected]] | Duncan    | Robert
  3 | [[email protected]] | Das       | Ram
  4 | [[email protected]] | Pinto     | Albert
  5 | [[email protected]] | Peter     | Robert
  6 | [[email protected]] | Lint      | Christian
  7 | [[email protected]] | Hussey    | Mike
  8 | [[email protected]] | Hunter    | Ralph
(8 rows)    

अगर आप टेबल को अपडेट करना चाहते हैं (इसमें डालने के बजाय):

with jsondata(jdata) as (
    -- values as above
)

update example set
    email = elem->>'email', 
    last_name = elem->>'last_name', 
    first_name = elem->>'first_name'
from jsondata,
jsonb_array_elements(jdata) as elem
where id = (elem->>'id')::int;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL क्वेरी की अधिकतम लंबाई

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

  3. जाँच कर रहा है कि क्या अजगर के तहत एक पोस्टग्रेस्क्ल टेबल मौजूद है (और शायद Psycopg2)

  4. सबस्ट्रिंग का उपयोग करके टेक्स्ट को कैसे अलग करें

  5. PostgreSQL - कोई संबंध नहीं मिला।