Sql Postgres jsonb列从字符串匹配通配符的数组中选择

Sql Postgres jsonb列从字符串匹配通配符的数组中选择,sql,arrays,postgresql,jsonb,Sql,Arrays,Postgresql,Jsonb,我希望将postgres jsonb列与数组一起使用,并能够对其进行过滤,因此我有一个带有列的模式: CREATE TABLE testtable ( id varchar(32) NOT NULL, refs jsonb NULL, ) 该列包含Json格式的数据: { "refs": ["one-1-0", "two-3-2", "two-3-4" ] } 我希望能够返回包含以(例如)“two-3-”开头的数组元素的所有行 我已经尝试了几种方法,但无法让

我希望将postgres jsonb列与数组一起使用,并能够对其进行过滤,因此我有一个带有列的模式:

CREATE TABLE testtable
(
id  varchar(32) NOT NULL,   
refs    jsonb           NULL,
)
该列包含Json格式的数据:

{ "refs": ["one-1-0", "two-3-2", "two-3-4" ] }
我希望能够返回包含以(例如)“two-3-”开头的数组元素的所有行

我已经尝试了几种方法,但无法让它按照我的意愿工作(最接近的方法是将数组部分作为文本,并将其作为字符串进行搜索-但这很糟糕)

我还想在此列中添加一个合适的索引以支持此查询

任何建议都会被愉快地接受! 谢谢

  • 将数组展开为每个数组元素一行
  • 使用
    LIKE
    比较器和
    %
    通配符按数组元素(
    value
    )筛选所有记录
  • 如果存在多个事件,则每个事件将返回一条记录。因此,如果您只需要原始数据集,可以使用
    DISTINCT
  • 将数组展开为每个数组元素一行
  • 使用
    LIKE
    比较器和
    %
    通配符按数组元素(
    value
    )筛选所有记录
  • 如果存在多个事件,则每个事件将返回一条记录。因此,如果您只需要原始数据集,可以使用
    DISTINCT

  • 可能重复的可能重复的可能重复的非常感谢,如果可能的话,我会把这张票投100次我是否正确地认为以下索引是支持此查询的正确索引:在testtable上创建索引idx1((refs->'refs'))我相信您至少可以尝试一下。非常感谢您,如果可能的话,我将对此进行100次投票:)我是否正确地认为以下索引是支持此查询的正确索引:在testtable上创建索引idx1((refs->'refs'))我相信您至少可以尝试一下。
    SELECT DISTINCT                                   -- 3
        id, refs
    FROM
        testtable,
        jsonb_array_elements_text(refs -> 'refs')     -- 1
    WHERE
        value LIKE 'two_3%'                           -- 2