Sto provando a costruire una query PostgreSQL che segue quanto segue, ma finora i miei sforzi sono stati vani.seleziona la riga dalla tabella e sostituisce un campo con una di un'altra colonna se esiste
Problema: ci sono due tabelle: A e B. mi piacerebbe per selezionare tutte le colonne dalla tabella A (con colonne: id, nome, descrizione) e sostituire la colonna "A.name" con il valore della colonna "B.title" dalla tabella B (avente colonne: id, table_A_id title, langcode) dove B.table_A_id è 5 e B.langcode è "nl" (se ci sono righe).
I miei tentativi:
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')
Ho provato con un caso e COALESCE(), ma non è riuscita a causa della mia inesperienza con entrambi i concetti.
Grazie in anticipo.
Non molto chiaro. "se non null" dici nel titolo. Ma la parola "null" non appare nella spiegazione. Vuoi dire "se c'è una riga correlata nell'altra tabella"? "B.table_A_id è 5": questa è davvero una costante o si riferisce al valore A.id corrispondente? Un esempio potrebbe essere d'aiuto – leonbloy
Vuoi solo aggiungere "B.title" se "A.name" è nullo? – rfusca
Ho modificato il titolo e aggiunto un esempio. Dispiace per la confusione. B.table_A_id corrisponde in effetti A.id. E per quanto riguarda la sostituzione, A.name dovrebbe essere sostituito con B.title se B.title esiste con le condizioni WHERE di cui sopra. – EarthMind