代码之家  ›  专栏  ›  技术社区  ›  Hommer Smith

有条件地执行jsonb_array_元素

  •  0
  • Hommer Smith  · 技术社区  · 5 年前

    我有一个名为jsonb的专栏 info { id: 2 }

    还有其他一些类型它有数组的形状: [{ id: 2 }]

    我有一个查询:

    SELECT * FROM users
    CROSS JOIN LATERAL jsonb_array_elements(users.info)
    

    现在,如果我的数据集在 列,没有问题,但如果有一个不是数组,而是对象,则会出现错误:

    ERROR: cannot extract elements from an object

    在PostgreSQL中,交叉连接silateral是否可以忽略 专栏?

    0 回复  |  直到 5 年前
        1
  •  0
  •   klin    5 年前

    使用函数 jsonb_typeof()

    select *
    from (
        select *
        from users
        where jsonb_typeof(info) = 'array'
        ) s
    cross join lateral jsonb_array_elements(info);
    

    Working example in rextester.