我在 PostgreSQL 中有以下查询:
select a.request_id,a.job_type from
(
select request_id,
job_id ->> 0 as job_id_1,
job_id ->> 1 as job_id_2
from job_requests_table
) tab
inner join job_requests_table a
on a.request_id = tab.request_id
where cast(tab.job_id_1 as varchar) like '%test-cluster-id-11111%';
这是有效的发现,因为test-cluster-id-11111被发现是 job_id 列的第一个元素。
它可以在任何地方,并且job_id
列也可以有一个元素,也可以有一个以上的元素..可以是四个或五个。
我正在寻找一些解决方案,我不应该指定它必须针对 where 子句中的特定位置进行比较
where cast(tab.job_id_1 as varchar) like '%test-cluster-id-11111%';
而且在内部查询中,如果它有一个元素,它应该生成该列的一个实例,如果它有“n”个元素,那么它应该生成那么多实例。
select request_id,
job_id ->> 0 as job_id_1,
job_id ->> 1 as job_id_2
from job_requests_table
job_id
column 是json
类型,可以有多个元素,如
["test-cluster-id-11111", "test-cluster-id-22222","test-cluster-id-33333"]
为什么这不起作用?
select request_id,unnest(string_to_array(job_id, ',')) as element from job_requests_table;
您可以使用该
?
运算符来测试 JSON 数组中是否存在字符串:如果您确实需要 LIKE 条件,则必须使用子查询