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

jsonb LIKE truy vấn trên các đối tượng lồng nhau trong một mảng

Giải pháp của bạn có thể được đơn giản hóa một số chi tiết:

SELECT r.res->>'name' AS feature_name, d.name AS detail_name
FROM   restaurants r
     , jsonb_populate_recordset(null::foo, r.res #> '{payload, details}') d
WHERE  d.name LIKE '%oh%';

Hoặc đơn giản hơn, với jsonb_array_elements() vì bạn không thực sự cần loại hàng (foo ) hoàn toàn trong ví dụ này:

SELECT r.res->>'name' AS feature_name, d->>'name' AS detail_name
FROM   restaurants r
     , jsonb_array_elements(r.res #> '{payload, details}') d
WHERE  d->>'name' LIKE '%oh%';

dbfiddle tại đây

Nhưng đó không những gì bạn đã hỏi chính xác:

Bạn đang trả về tất cả các phần tử mảng JSON (0-n trên mỗi hàng của bảng cơ sở), trong đó một khóa cụ thể ('{payload,details,*,name}' ) khớp (phân biệt chữ hoa chữ thường).

Và câu hỏi ban đầu của bạn có một mảng JSON lồng vào nhau. Bạn đã xóa mảng bên ngoài cho giải pháp này - Tôi cũng làm như vậy.

Tùy thuộc vào yêu cầu thực tế của bạn, khả năng tìm kiếm văn bản mới trong tổng số Postgres 10 có thể hữu ích.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thay đổi một bảng bình thường thành một bảng cstore_fdw nước ngoài

  2. Lịch sử triển khai của bảng PostgreSQL

  3. Hợp nhất các giá trị JSONB trong PostgreSQL?

  4. Rất nhiều truy vấn HIỂN THỊ MỨC ĐỘ ISOLATION GIAO DỊCH trong postgres

  5. PostgreSQL:ràng buộc ảnh hưởng đến nhiều bảng