arrays - Postgresql 9.5 JSONB嵌套数组LIKE语句

标签 arrays postgresql nested

我有一个名为“product”的 jsonb 列,其中包含与下面类似的 jsonb 对象。我正在尝试弄清楚如何对 postgresql 9.5 中的相同数据执行 LIKE 语句。

{
  "name":"Some Product",
  "variants":[
    {
      "color":"blue",
      "skus":[
        {
          "uom":"each",
          "code":"ZZWG002NCHZ-65"
        },
        {
          "uom":"case",
          "code":"ZZWG002NCHZ-65-CASE"
        },
      ]
    }
]}

以下查询适用于完全匹配。

SELECT * FROM products WHERE product#> '{variants}' @> '[{"skus":[{"code":"ZZWG002NCHZ-65"}]}]';

但我需要支持 LIKE 语句,例如“开头为”、“结尾宽度”和“包含”。这将如何完成?

示例:假设我希望退回所有 SKU 代码以“ZZWG00”开头的产品。

最佳答案

您应该取消嵌套variantsskus(使用jsonb_array_elements()),这样您就可以检查sku->>'code ':

SELECT DISTINCT p.* 
FROM 
    products p,
    jsonb_array_elements(product->'variants') as variants(variant),
    jsonb_array_elements(variant->'skus') as skus(sku)
WHERE
    sku->>'code' like 'ZZW%';

使用DISTINCT,因为一个产品中存在多个匹配结果,您将获得多行结果。

关于arrays - Postgresql 9.5 JSONB嵌套数组LIKE语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37602004/

相关文章:

c - 打印双指针字符数组时出现运行时错误

postgresql - 解析 COPY...WITH BINARY 结果

php - 仅允许 X 嵌套标签

javascript - 为什么全局变量在嵌套循环中只执行一次?

python - Pandas Dataframe 到具有多个键的字典

java - Java 消除数组中的重复数字

java - 创建数组并计算大写字母的数量并通过复制到第二个数组来删除指定的字符

javascript - 无法读取 "undefined"的属性,即使对象已定义! [ react ]

ruby-on-rails - PostgreSQL 复制策略

javascript - 作为 JSON 对象数组的 Rails 字段?