SELECT C.id, C.name, json_agg(E) AS emails FROM contacts C
LEFT JOIN emails E ON C.id = E.user_id
GROUP BY C.id;
Postgres 9.3 crea uscita per esempioPostgreSQL LEFT JOIN json_agg() ignorano/rimuovere NULL
id | name | emails
-----------------------------------------------------------
1 | Ryan | [{"id":3,"user_id":1,"email":"[email protected]"},{"id":4,"user_id":1,"email":"[email protected]"}]
2 | Nick | [null]
Come sto usando un LEFT JOIN non ci saranno casi in cui non v'è alcuna corrispondenza destro del tavolo quindi vuota (null) i valori sono sostituiti per le colonne della tabella di destra. Di conseguenza ottengo [null]
come uno degli aggregati JSON.
Come posso ignorare/rimuovere null
quindi ho un array JSON vuoto []
quando la colonna della tabella di destra è nullo?
Cheers!
Grazie romana, mi è stato effettivamente chiedendo se un condizionale sarebbe l'idea migliore. È più veloce dell'uso di un 'COALESCE' o qualcosa di simile? La query non deve essere un "SINISTRA UNISCI" purché la tabella dei messaggi di posta elettronica sia trasformata in JSON come campo "email". – user3081211
non riesco a pensare a un modo più veloce per farlo, puoi provare ad usare inner join e quindi union con i contatti dove contact.id non esiste nelle email, ma dubito che questo sarà più veloce .. –