【问题标题】:Filter JSON using IN operator in PostgreSQL DB在 PostgreSQL 数据库中使用 IN 运算符过滤 JSON
【发布时间】:2022-11-22 22:42:31
【问题描述】:
{
  "List": [
    {
      "f1": "eed31964",
      "f2": "ABC"
    },
    {
      "f1": "964433d1",
      "f2": "DEF"
    }
  ]
}

JSON 列表包含 2 个对象。如何筛选位置

f1 IN ('eed31964','964433d1') AND f2 IN ('ABC','DEF')

我努力了

column->'List' @> '[{"f1": "eed31964"},{"f1": "964433d1"}]'

但这就像 AND 条件一样工作,而 IN 运算符像 OR 运算符一样工作。

【问题讨论】:

标签: sql json postgresql


【解决方案1】:

您可以应用连续的 cross joins 来访问列表元素,然后应用您的过滤条件:

select jsonb_object_agg(t1.key, t1.l) from (
   select t2.key, jsonb_agg(v.value) l 
   from tbl t cross join jsonb_each(t.js) t2 
   cross join jsonb_array_elements(t2.value) v 
   where (v.value -> 'f1')::text in ('"eed31964"','"964433d1"') 
       and (v.value -> 'f2')::text in ('"ABC"','"DEF"') 
   group by t2.key) t1

See fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-08
    • 2021-06-28
    • 1970-01-01
    • 2017-03-22
    • 2016-04-10
    • 2016-05-20
    • 1970-01-01
    • 2015-06-07
    相关资源
    最近更新 更多