Respaldo en un diseño de base de datos multilingüe.
Estoy diseñando una base de datos multilingüe sobre productos, qué original 😉
Este es el diseño simplificado:
Si selecciono datos para ‘de’, ¿está vacío (NULL)?
select
p.id,
p.price,
pi.name,
pi.description
from public.products p
inner join public.locales loc
on loc.lang = 'de'
left join public.products_i18n pi
on p.id = pi.id and pi.lang = loc.id
Me gustaría tener un respaldo en inglés cuando la configuración local requerida no esté presente:
select
p.id,
p.price,
coalesce(pi.name, pi_def.name),
coalesce(pi.description, pi_def.description)
from public.products p
inner join public.locales loc
on loc.lang = 'de'
left join public.products_i18n pi
on p.id = pi.id and pi.lang = loc.id
left join public.products_i18n pi_def
on p.id = pi_def.id and pi_def.lang = '1' -- respaldo en inglés
Sin embargo, recibo dos filas: 1 fila con los datos de respaldo correctos (se espera que la descripción esté vacía) y 1 fila vacía.
¿Es un problema de visualización con pgAdmin o mi consulta está incorrecta?
SQL fiddle disponible aquí:
http://sqlfiddle.com/#!17/485be/1
davy.ai
Parece ser un problema de visualización con pgAdmin, ya que la consulta en sí parece estar correcta. El problema puede estar relacionado con la forma en que pgAdmin maneja los valores NULL en una unión izquierda. Una solución podría ser agregar una cláusula WHERE para filtrar la fila vacía:
Esto debería garantizar que solo se devuelva la fila con datos reales.