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

Truy vấn postgresql cho các đối tượng trong trường JSONB lồng nhau

Bạn nên làm quen với Các hàm và toán tử JSON .

-- #1
select *
from example
where content->'Item'->>'Name' ilike '%dog%'
and content->'Item'->>'Spec' ilike '%red%'

-- #2
select *
from example
where content->'Item'->>'Name' ilike '%dog%'
or content->'Item'->>'Spec' ilike '%red%'

-- #3
select distinct on(no) t.*
from example t,
lateral jsonb_each_text(content->'Item')
where value ilike '%dog%';

-- and
select *
from example t
order by length(content->'Item'->>'Name');

Postgres 12 giới thiệu các tính năng mới triển khai Ngôn ngữ đường dẫn SQL / JSON. Các truy vấn thay thế bằng jsonpath có thể trông như thế này:

-- #1
select *
from example
where jsonb_path_exists(
    content, 
    '$ ? ($.Item.Name like_regex "dog" flag "i" && $.Item.Spec like_regex "red" flag "i")');

-- #2
select *
from example
where jsonb_path_exists(
    content, 
    '$ ? ($.Item.Name like_regex "dog" flag "i" || $.Item.Spec like_regex "red" flag "i")');

-- #3
select *
from example
where jsonb_path_exists(
    content, 
    '$.Item.* ? (@ like_regex "dog" flag "i")');

Hai truy vấn đầu tiên về cơ bản tương tự với các truy vấn trước đó và -> cú pháp có vẻ đơn giản và dễ chịu hơn jsonpath một. Cần đặc biệt chú ý đến truy vấn thứ ba, sử dụng ký tự đại diện để loại bỏ nhu cầu sử dụng hàm đắt tiền jsonb_each_text () và sẽ nhanh hơn đáng kể.

Đọc trong tài liệu:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bảo mật cấp hàng không hoạt động đối với chủ sở hữu bảng

  2. PostgreSQL GIẢI THÍCH - Chi phí Truy vấn là gì?

  3. Các ký tự tối đa trong nhãn (tên bảng, cột, v.v.)

  4. Làm cách nào để kết nối với PostgreSQL mà không chỉ định tên cơ sở dữ liệu?

  5. Sử dụng nguồn Postgresql JDBC với Apache Spark trên EMR