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

Làm cách nào để lấy các phần tử có một số duy nhất từ ​​một mảng json trong PostgreSQL?

Hãy thử một cách tiếp cận khác, rõ ràng với JOIN LATERAL :

select b.id, t.rn
     , t.account->>'name' AS name
     , t.account->>'balance' AS balance
FROM   bank_accounts b
LEFT   JOIN LATERAL jsonb_array_elements(b.bank_accounts)
                    WITH ORDINALITY AS t (account, rn) ON true;

Nếu bạn không quan tâm đến các hàng có giá trị trống hoặc rỗng trong bank_accounts , sử dụng CROSS JOIN đơn giản hơn :

select b.id, t.rn
     , t.account->>'name' AS name
     , t.account->>'balance' AS balance
FROM   bank_accounts b
     , jsonb_array_elements(b.bank_accounts) WITH ORDINALITY AS t (account, rn);

Yếu tố quan trọng cho vấn đề của bạn là WITH ORDINALITY tạo ra số hàng một cách nhanh chóng cho các chức năng trả về thiết lập. Nó được giới thiệu với Postgres 9.4 - phù hợp với bạn, jsonb cũng được giới thiệu với 9.4.

Đó là duy nhất cho mỗi hàng cơ bản. Để trở thành duy nhất trên toàn bộ bảng, hãy thêm id của bảng bên dưới.

Chi tiết cho WITH ORDINALITY :

Có liên quan:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn postgresql cho các đối tượng trong trường JSONB lồng nhau

  2. Dịch vụ Power BI - Không thể làm mới nguồn postgresql không hỗ trợ các kết nối được mã hóa

  3. chức năng không tồn tại, nhưng tôi thực sự nghĩ rằng nó có

  4. Làm cách nào để tìm giá trị lớn nhất trong một cột trong sql postgres?

  5. Cách tăng tốc hiệu suất chèn trong PostgreSQL