COALESCE
NVL (Oracle), IFNULL (MySQL)
COALESCE è una funzione SQL standard che accetta una lista di espressioni e restituisce la prima che non è NULL. Se tutte le espressioni sono NULL, restituisce NULL.
Sintassi #
COALESCE(espressione1, espressione2, espressione3, ...)
Equivale a una catena di CASE WHEN:
CASE WHEN espressione1 IS NOT NULL THEN espressione1
WHEN espressione2 IS NOT NULL THEN espressione2
WHEN espressione3 IS NOT NULL THEN espressione3
ELSE NULL END
Uso nelle gerarchie #
Nel contesto delle ragged hierarchies, COALESCE viene spesso usata per riempire i livelli mancanti:
COALESCE(top_group_name, group_name, client_name) AS top_group_name
Questa operazione funziona come workaround nei report, ma ha limiti importanti: va ripetuta in ogni query, non distingue i valori originali da quelli di fallback, e complica il codice.
Alternative per database #
- Oracle:
NVL(a, b)per due valori,COALESCEper più di due - MySQL:
IFNULL(a, b)per due valori,COALESCEper più di due - PostgreSQL: solo
COALESCE(standard SQL)
Approccio consigliato nel DWH #
Nel data warehouse, è preferibile usare COALESCE nell’ETL per popolare la tabella dimensionale con valori NOT NULL (self-parenting), piuttosto che usarla ripetutamente nei report. La logica di gestione dei NULL deve stare nel modello, non nella presentazione.