Estoy intentando construir una consulta de PostgreSQL que haga lo siguiente pero hasta ahora mis esfuerzos han sido en vano.seleccione una fila de la tabla y sustituya un campo con uno de otra columna si existe
Problema: Hay dos tablas: A y B. me gustaría para seleccionar todas las columnas de la tabla A (tener columnas: ID, nombre, descripción) y sustituir la columna "A.name" con el valor de la columna "B.title" de la tabla B (que tiene columnas: id, table_A_id title, langcode) donde B.table_A_id es 5 y B.langcode es "nl" (si hay alguna fila).
Mis intentos:
SELECT A.name,
case when exists(select title from B where table_A_id = 5 and langcode= 'nl')
then B.title
else A.name
END
FROM A, B
WHERE A.id = 5 and B.table_A_id = 5 and B.langcode = 'nl'
-- second try:
SELECT COALESCE(B.title, A.name) as name
from A, B
where A.id = 5 and B.table_A_id = 5 and exists(select title from B where table_A_id = 5 and langcode= 'nl')
He intentado usar un caso y COALESCE(), pero fracasó debido a mi falta de experiencia con ambos conceptos.
Gracias de antemano.
No muy claro. "si no es nulo", dices en el título. Pero la palabra "nulo" no aparece en la explicación. ¿Quiere decir "si hay una fila relacionada en la otra tabla"? "B.table_A_id es 5": ¿esto es realmente una constante o se refiere al valor correspondiente de A.id? Un ejemplo podría ayudar – leonbloy
¿Solo desea sub el "título" si "A.name" es nulo? – rfusca
He editado el título y he añadido un ejemplo. Perdón por la confusion. B.table_A_id corresponde A.id de hecho. Y en cuanto a la sustitución, A.name debe reemplazarse con B.title si B.title existe con las condiciones WHERE anteriores. – EarthMind