如何参数化对 jsonb 数组包含的搜索?
How do I parameterize a search for jsonb array contains?
我有 colA,它是一个带有数组的 jsonb 列。以下是一些示例行:
["postgresql", "mysql", "elasticsearch"]
["python", "perl"]
我正在尝试搜索数组是否具有 "postgresql" 或 "mysql":
SELECT 'colA @> ANY (ARRAY ['["postgresql"]', '["mysql"]']::jsonb[])' FROM mytable
即returns第一行。现在,由于用户将传递数据,因此我需要参数化查询:
SELECT 'colA @> ANY (ARRAY ['[]', '[]']::jsonb[])' FROM mytable
但我得到:
ERROR: syntax error at or near "["
您可以 cross join
from
子句中的 table 和 jsonb_array_elements_text()
允许您根据相应的过滤 where
子句中的记录获得的值。
select t.id,j.* from mytable t cross join
jsonb_array_elements_text(cola) as j(val)
where j.val IN ( 'postgresql','mysql');
我有 colA,它是一个带有数组的 jsonb 列。以下是一些示例行:
["postgresql", "mysql", "elasticsearch"]
["python", "perl"]
我正在尝试搜索数组是否具有 "postgresql" 或 "mysql":
SELECT 'colA @> ANY (ARRAY ['["postgresql"]', '["mysql"]']::jsonb[])' FROM mytable
即returns第一行。现在,由于用户将传递数据,因此我需要参数化查询:
SELECT 'colA @> ANY (ARRAY ['[]', '[]']::jsonb[])' FROM mytable
但我得到:
ERROR: syntax error at or near "["
您可以 cross join
from
子句中的 table 和 jsonb_array_elements_text()
允许您根据相应的过滤 where
子句中的记录获得的值。
select t.id,j.* from mytable t cross join
jsonb_array_elements_text(cola) as j(val)
where j.val IN ( 'postgresql','mysql');