Eu tenho uma consulta abaixo no 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%';
Isso está funcionando porque test-cluster-id-11111 foi encontrado como um primeiro elemento da coluna job_id.
Pode estar em qualquer lugar e também a job_id
coluna pode ter um elemento também ou mais de um também.. pode ser quatro ou cinco.
Eu estava procurando alguma solução que eu não deveria especificar que tem que ser comparar para posição específica na cláusula where
where cast(tab.job_id_1 as varchar) like '%test-cluster-id-11111%';
e também na consulta interna, deve ser como se tiver um elemento, deve gerar uma instância dessa coluna e, se tiver 'n' elementos, deve gerar essas várias instâncias.
select request_id,
job_id ->> 0 as job_id_1,
job_id ->> 1 as job_id_2
from job_requests_table
job_id
coluna é do json
tipo e pode ter vários elementos como
["test-cluster-id-11111", "test-cluster-id-22222","test-cluster-id-33333"]
Por que isso não está funcionando?
select request_id,unnest(string_to_array(job_id, ',')) as element from job_requests_table;
Você pode usar o
?
operador para testar a existência de uma string em uma matriz JSON:Se você realmente precisa de uma condição LIKE, você terá que usar uma subconsulta