【问题标题】:Get rows whose JSON array contains an object with a value获取其 JSON 数组包含具有值的对象的行
【发布时间】:2021-12-31 07:45:32
【问题描述】:

我有一个查询,它返回一个名为 record 的 JSON 列,该列由子查询生成。

SELECT record FROM (my json query) records;

每条记录都包含一个标签对象数组:

{
  "tags": [
    {
      "id": 3,
      "name": 'foo'
    },
    {
      "id": 10,
      "name": 'bar'
    }
  ],
  // other props
}

我想修改我的查询以选择所有records,其中tags 包含具有特定ID 的标签,但我不知道如何在不添加另一个子查询的情况下执行此操作。是否有任何我缺少的功能或操作可以仅使用 where 子句来实现?

在伪代码中,有什么我可以做的吗?

SELECT record FROM (my json query) records
WHERE 3 = ANY(get_ids_from_objects(record->'tags', 'id'));

出于代码原因,我也不想修改创建 JSON 结构的子查询,这就是我排除它的原因。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    您可以使用包含运算符@>

    select *
    from (your query)
    where record @> '{"tags": [{"id": 3}]}'
    

    这假定列record 的类型为jsonb(它应该是)。如果不是,则需要投:record::jsonb

    【讨论】:

    • @chrispytoes:已修复,抱歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2019-12-28
    • 1970-01-01
    • 2019-01-20
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多