Eu tenho uma matriz como esta:
["f383224c-aa95-40c9-a4e4-fa41747f49c5","c783234c-aa95-40c9-a4e4-fa41747f49c6"]
E eu quero selecionar com qualquer, mas recebi um erro não é possível converter text[] para uuid
SELECT c.name FROM cars c
LEFT JOIN location_orders_cars loc ON loc.car_id = c.id
WHERE loc.user_id = ANY($1::uuid) AND loc.location_orders_id = $2 AND loc.is_back = NULL
LIMIT 10;
$1 = matriz de UUID acima
$ 2 = 355
o que estou fazendo errado aqui?
Você tem alguns problemas além do erro que está recebendo.
Em primeiro lugar, o predicado
loc.is_back = NULL
nunca será verdadeiro. Você não pode usar operadores lógicos/aritméticos comnull
; eles sempre retornarãonull
, mesmo que o predicadonull = null
não seja Verdadeiro; você precisa usar este casoloc.is_back IS NULL
.Em segundo lugar, no Postgres, aspas duplas indicam identificadores (nome da tabela, nome da coluna, etc.). Os valores do seu array precisam estar entre aspas simples.
Agora, o evento principal: você pode usar ANY com um array, mas não se precisar converter tipos de dados. Você pode passar os UUIDS como uuid[]. Se não puder fazer isso, precisará desaninhar o array e converter os valores individuais. Algo como (veja a demonstração)
Você precisa lançá-lo para
uuid[]
nãouuid
.Além disso, seu
LEFT JOIN
é logicamente umINNER JOIN
, e como mencionado por outros, vocêIS NULL
não precisa= NULL
.Se você estiver usando um aplicativo para passar parâmetros, recomendo fortemente alterá-lo para que seja passado
uuid[]
corretamente.