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

Xóa phần tử khỏi mảng trong đối tượng JSONB

XÓA hoạt động trên các hàng của bảng. Do đó, bạn không thể sử dụng nó trừ khi bạn muốn xóa hàng hoàn chỉnh.

Hãy thử điều này:

create temp table testing as
select 
    '{ "playersContainer": {
        "players": [
            {
                "id": "1",
                "name": "Nick"
            },
            {
                "id": "2",
                "name": "Rick"
            },
            {
                "id": "3",
                "name": "Trick"
            }
        ]
     }}'::jsonb as value;

Bây giờ bạn cần tìm vị trí của người chơi bạn muốn xóa, giả sử bạn muốn Rick với id 2 (trừ 1 vì chỉ số bắt đầu từ 0)

select position-1 from testing, jsonb_array_elements(value->'playersContainer'->'players') with ordinality arr(elem, position) WHERE elem->>'id' = '2';

Bây giờ bạn có thể kết hợp nó với một UPDATE câu lệnh để cập nhật trường. Sử dụng toán tử dấu trừ (-) để xóa phần tử ở chỉ mục mong muốn.

UPDATE testing SET value = jsonb_set(value, '{playersContainer,players}', (value->'playersContainer'->'players') - (select position-1 from testing, jsonb_array_elements(value->'playersContainer'->'players') with ordinality arr(elem, position) WHERE elem->>'id' = '2')::int );

Kết quả cuối cùng:

{
    "playersContainer":{
        "players":[
            {
                "id":"1",
                "name":"Nick"
            },
            {
                "id":"3",
                "name":"Trick"
            }
        ]
    }
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PG ::Lỗi:LỖI:mã hóa mới (UTF8) không tương thích

  2. cách chỉ chọn các giá trị duy nhất từ ​​các bảng có liên quan

  3. Làm thế nào để so sánh dữ liệu giữa hai cơ sở dữ liệu trong PostgreSQL?

  4. Trích xuất giá trị của thẻ xml trong PostgreSQL

  5. postgresql:chạy các lệnh SQL bằng psql trong dòng lệnh