PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

cập nhật nhiều hàng trong một truy vấn nhưng đầu vào chúng tôi đang mong đợi là từ đối tượng json của nhiều dữ liệu

Bạn có thể thực hiện chèn hàng loạt dựa trên tài liệu json. Bạn nên định dạng lại tài liệu vì định dạng hiển thị trong câu hỏi là lạ và không thực tế.

Ví dụ hoạt động đầy đủ:

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;

Kết quả:

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)    

Nếu bạn muốn cập nhật bảng (thay vì chèn vào nó):

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. Biểu thức truy vấn Django cho các trường được tính toán yêu cầu điều kiện và truyền

  2. Tortoise ORM cho Python không có quan hệ trả về của các thực thể (Pyndantic, FastAPI)

  3. PostgreSQL 11:Có gì mới

  4. Kết hợp mệnh đề CHỌN tùy chỉnh trong truy vấn ActiveRecord

  5. fe_sendauth:không có lỗi cung cấp mật khẩu trong postgresql + laravel