You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 11.13中如何从JSON数组选取元素并关联字段查询

PostgreSQL 11.13 从JSON数组提取数据的查询方法

问题背景

现有如下JSON格式的数据:

{
  "processedResult": {
    "orderPayment": {
      "paymentType": "VISA"
    },
    "store": "US",
    "orderDeliveryGroups": [
      {
        "address": {
          "city": "New York",
          "state": "NY"
        },
        "deliveryType": "STH"
      }
    ]
  }
}

当前使用的查询语句为:

SELECT DISTINCT myDataJsonb -> 'processedResult' -> 'orderPayment' -> 'paymentType'
FROM myData
WHERE myDataJsonb -> 'processedResult' ->> 'store'  = 'US'

期望得到包含PaymentType和DeliveryType的查询结果:

PaymentTypeDeliveryType
VISASTH
AMEXSTH
PayPalFOO

解决方案

要从JSON数组中提取deliveryType并与paymentType关联,需要使用jsonb_array_elements函数将数组展开为行记录,再提取对应字段。正确的查询语句如下:

SELECT 
  myDataJsonb -> 'processedResult' -> 'orderPayment' ->> 'paymentType' AS "PaymentType",
  dg ->> 'deliveryType' AS "DeliveryType"
FROM myData,
     jsonb_array_elements(myDataJsonb -> 'processedResult' -> 'orderDeliveryGroups') AS dg
WHERE myDataJsonb -> 'processedResult' ->> 'store' = 'US'

说明

  • jsonb_array_elements函数将orderDeliveryGroups数组拆分为多行,每个数组元素对应一行数据;
  • 使用->>操作符获取字段的文本值,避免返回JSON格式的结果;
  • 如果需要去重,可在SELECT后添加DISTINCT关键字。

内容的提问来源于stack exchange,提问作者Ilyas Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:35:24