sql - 在 Postgres 中查询 JSONB 中的复杂数组

标签 sql postgresql jsonb

我有一个 JSONB 字段值:

{
   "status":200,
   "response":{
      "page":1,
      "limit":10,
      "total":4,
      "orders":[
         {
            "id":40201
         },
         {
            "id":40111
         }
      ]
   }
}

如何查询 id=40201 的订单数组对象?

我正在尝试查询具有 response->orders->[id: 40201] 的所有行

最佳答案

demo:db<>fiddle

如果您知道这是数组中的第一个对象(从零开始!):

SELECT
    yourjson -> 'response' -> 'orders' -> 0

如果没有,您必须使用 jsonb_array_elements() 将数组扩展为每个元素一行,并过滤每一行:

SELECT 
    elems.value
FROM 
    yourtable,
    jsonb_array_elements(yourjson -> 'response' -> 'orders') elems
WHERE
    elems ->> 'id' = '40201'

documentation

关于sql - 在 Postgres 中查询 JSONB 中的复杂数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57115511/

相关文章:

arrays - JSONB 或整数数组

arrays - 在 WHERE IN 子句中使用来自 JSONB 数组的值

SQL Server 删除时间戳超过 1 个月的行

ruby-on-rails - 在 PGSQL ActiveRecord 中构建与自定义字符串外键的一对多关系

java - Hibernate 在 PostgreSQL 中使用驼峰格式的主键

postgresql - jsonb_path_query 按子顺序

mysql - SELECT 中的 GROUP BY 和 SELECT

php - Eloquent laravel : How to get a row count from a ->get()

sql - 计数按开始和结束时间分组的条目

sql - 在 Postgres 中将 Const Integer 转换为 Bigint