Tengo una tabla "Fotos" que hace referencia a una lista de personas que se muestran en la foto. Se hace referencia a las personas en una columna JSONB llamada "personas" que contiene un json como en este formato [1,2,3,4,5]

CREATE TABLE Photos (
  id INTEGER PRIMARY KEY,
  name TEXT,
  persons JSONB
);

CREATE TABLE Person(
  id INTEGER PRIMARY KEY,
  name TEXT
);

Quiero hacer un LEFT JOIN pero no sé cómo. Algo como esto

SELECT * FROM photos p LEFT JOIN person ON p.persons = person.id

¿Alguna idea de cómo hacerlo?

0
Philiz 21 ene. 2021 a las 23:44

1 respuesta

La mejor respuesta

Desactive la matriz y luego puede unirse:

select ph.id, ph.name, pe.*
from photos ph
  left join jsonb_array_elements(ph.persons) as p(pid) on true
  left join person pe on pe.id = p.pid::int

La primera unión a la izquierda expande todos los elementos de la matriz a filas. Se requiere una unión a la izquierda; de lo contrario, las fotos con una matriz persons vacía no aparecerían. Entonces puedes unirte a la tabla de personas.

1
a_horse_with_no_name 21 ene. 2021 a las 21:21