如何对 JSONB 数组的元素使用 LIKE?
How to use LIKE on elements of a JSONB array?
我需要使用 LIKE
或 ILIKE
进行搜索 - 应用于 JSONB[]
列的元素。
我可以使用 unnest()
单独显示嵌套的 JSONB
元素,但我无法将它与我的 LIKE
表达式结合起来。我的查询:
SELECT
UNNEST( column_jsonb[] )
FROM
table1
WHERE
UNNEST( column_jsonb[] ) ->> 'member_type' LIKE '%member%'
结果出错:
argument of WHERE must not return a set
如何做对?
如果确实是 jsonb[]
列:
SELECT * -- or whatever
FROM t, unnest(jsonb_col) j
WHERE j->>'member_type' LIKE '%member%';
这是隐含的 CROSS JOIN LATERAL
。
如果它是普通 jsonb
列中的 JSON 数组(更有可能):
SELECT *
FROM t1, jsonb_array_elements(jsonb_col) j
WHERE j->>'member_type' LIKE '%member%';
相关:
- Query for array elements inside JSON type
我需要使用 LIKE
或 ILIKE
进行搜索 - 应用于 JSONB[]
列的元素。
我可以使用 unnest()
单独显示嵌套的 JSONB
元素,但我无法将它与我的 LIKE
表达式结合起来。我的查询:
SELECT
UNNEST( column_jsonb[] )
FROM
table1
WHERE
UNNEST( column_jsonb[] ) ->> 'member_type' LIKE '%member%'
结果出错:
argument of WHERE must not return a set
如何做对?
如果确实是 jsonb[]
列:
SELECT * -- or whatever
FROM t, unnest(jsonb_col) j
WHERE j->>'member_type' LIKE '%member%';
这是隐含的 CROSS JOIN LATERAL
。
如果它是普通 jsonb
列中的 JSON 数组(更有可能):
SELECT *
FROM t1, jsonb_array_elements(jsonb_col) j
WHERE j->>'member_type' LIKE '%member%';
相关:
- Query for array elements inside JSON type