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

Tại sao tôi không thể truy vấn trực tiếp trên jsonb_array_elements?

Như thông báo lỗi cho biết, các đối số cho WHERE không được trả lại một tập hợp. jsonb_array_elements trả về một tập hợp và nó không thể được so sánh với một giá trị duy nhất. Trong truy vấn thứ hai, bạn có một phép nối chéo bên trong vùng chọn và điều đó sẽ chuyển nó thành một kết quả phù hợp để sử dụng WHERE trên.

Bạn cũng có thể làm theo cách này

SELECT mydata.pk FROM mydata
  WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');

Tại đây, lựa chọn con sẽ cho phép bạn sử dụng IN toán tử để tìm giá trị mong muốn vì kết quả không còn là một tập hợp.

Một cách khác là truy vấn jsonb trực tiếp

SELECT mydata.pk FROM mydata
  WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;

Bằng cách này, bạn không cần chuyển jsonb thành tập kết quả và tìm kiếm trong tập hợp đó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. chức năng khác biệt () (không chọn bộ định nghĩa) trong postgres

  2. org.postgresql.util.PSQLException:Chỉ mục cột nằm ngoài phạm vi:3, số cột:2

  3. Postgres:Chúng tôi có thể có cột tăng tự động trong khóa tổng hợp không

  4. Chèn hàng loạt vào Postgres với brianc / node-postgres

  5. Trích xuất các tên khóa có giá trị thực từ đối tượng JSONB