sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Por qué no puedo consultar directamente en jsonb_array_elements?

Como dice el mensaje de error, argumentos para WHERE no debe devolver un conjunto. jsonb_array_elements devuelve un conjunto y no se puede comparar con un solo valor. En la segunda consulta, tiene una combinación cruzada dentro de la selección y eso la convierte en un resultado adecuado para usar WHERE activado.

También puedes hacerlo de esta manera

SELECT mydata.pk FROM mydata
  WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');

Aquí la subselección le permitirá usar el IN operador para encontrar el valor deseado ya que el resultado ya no es un conjunto.

Otra forma es consultar el jsonb directamente

SELECT mydata.pk FROM mydata
  WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;

De esta manera, no necesita convertir jsonb en un conjunto de resultados y buscar dentro de él.