Cómo seleccionar registros de una tabla de Postgres utilizando una instrucción ORDER BY en una jsonb columna que señala a otra tabla

0

Pregunta

Tengo dos tablas, characteristics y students.

características

 id      name          value
----    ------        -------
 1      country       england
 2      country       brazil
 3      games         football
 4      games         baseball
 5      country       india
 .        .             .
 .        .             .

los estudiantes

 first_name      age       character_values
------------    -----     ------------------
  Jason          12         [1,4]
  Mark           14         [1,3] 
  Kunal          10         [5,3] 
   .              .           .
   .              .           .
   .              .           .

El characteristics la tabla tiene tres columnas donde el id la columna es un campo de incremento automático. El name indica el nombre de una característica específica y la value indica la información acerca de la característica.

El students la tabla contiene detalles acerca de cada estudiante. El character_value campo en el students la tabla es un jsonb campo. Cada elemento en el jsonb matriz es un IDENTIFICADOR que señala a la característica apropiada IDENTIFICACIÓN en el characteristics tabla.

(por ejemplo, si un estudiante es el país de la india, a continuación, el 5 de ID se anexa a character_values jsonb matriz en contra de los respectivos nombre del estudiante)

Suponiendo que cada estudiante sólo puede pertenecer a un país, ¿cómo seleccionar una lista de alumnos, mientras que ordenar el resultado por el nombre del país al que pertenecen?

database jsonb postgresql sql
2021-11-21 18:58:49
1

Mejor respuesta

1

Usted puede unirse a las tablas con jsonb_array_elements:

select c.*, s.first_name from characteristics c join students s on exists 
  (select 1 from jsonb_array_elements(s.character_values) v where v.value::int = c.id)

Salida:

id nombre valor first_name
1 país inglaterra Jason
1 país inglaterra Marca
3 juegos fútbol Marca
3 juegos fútbol Kunal
4 juegos béisbol Jason
5 país la india Kunal
2021-11-21 19:12:50

¿Por qué utilizar una instrucción SELECT 1 en lugar de SELECCIONAR *? Alguna razón específica?
Vinay

@Vinay select 1 es el convenio para exists las subconsultas.
Ajax1234

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................