Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

147
Vistas
Obtenga valores de objetos anidados de JSON en Postgres

Así que aquí está mi columna JSON en mi base de datos de Postgres:

 { "objekt_art": { "86": { "code": "86", "bezeichnung_de": "Kino", "bezeichnung_fr": "Cinéma", "bezeichnung_it": "Cinema", "bezeichnung_en": null, "kurz_bezeichnung_de": "Kino", "relevant_fuer_berechnung_steuerquote": true }, "27": { "code": "27", "bezeichnung_de": "Kiosk", "bezeichnung_fr": "Kiosque", "bezeichnung_it": "Chiosco", "bezeichnung_en": null, "kurz_bezeichnung_de": "Kiosk", "relevant_fuer_berechnung_steuerquote": true } } }

Necesito poder consultar bezechnung_de, por ejemplo, donde el código = 86. El número de código que puedo pasar de otra tabla.

¿Cómo puedo, por ejemplo, hacer una consulta con dos columnas? Uno con el número y el segundo con bezeichnung_de.

Me gusta esto:

 Code Bez 86 Kino
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Estructura de datos de muestra y tabla de muestra para unir datos: dbfiddle

 select je.value -> 'code' as "Code", je.value -> 'bezeichnung_de' as "Bez" from test t cross join jsonb_each((data::jsonb ->> 'objekt_art')::jsonb) je -- In table test_join I insert value 86 for join record inner join test_join tj on je.key::int = tj.json_id
over 4 years ago · Santiago Trujillo Denunciar

0

Como conoces el código, esto es bastante fácil:

 select t.the_column -> 'objekt_art' -> '86' ->> 'code' as code, t.the_column -> 'objekt_art' -> '86' ->> 'bezeichnung_de' as bez from the_table t where ...

El valor '86' puede ser un parámetro. Sin embargo, la primera expresión para seleccionar el código no es realmente necesaria, ya que podría reemplazarla con el valor constante (= parámetro) directamente.

Si la clave JSON "externa" no tiene el mismo valor que el valor del code , podría usar algo como esto:

 select o.value ->> 'code' as code, o.value ->> 'bezeichnung_de' as bez from the_table t cross join jsonb_each(t.the_column -> 'objekt_art') o(key, value) where o.key = '86' and ... other conditions ...

Si está utilizando Postgres 13 o posterior, esto también se puede escribir como una expresión de ruta JSON:

 select a.item ->> 'code' as code, a.item ->> 'bezeichnung_de' as bez from ( select jsonb_path_query_first(t.the_column, '$.objekt_art.* ? (@.code == "86")') as item from the_table t where .... ) a

Todos los ejemplos asumen que la columna está definida con el jsonb de datos que debería ser. Si no es así, debes lanzarlo: the_column::jsonb

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda