State pensando alla CASE
un'espressione come è stato tenuto il null
come input per una funzione o operatore, dove ingresso nullo comporta generalmente uscita nullo:
regress=> SELECT 't'::boolean = NULL::boolean;
bool
------
(1 row)
in cui si comporta come una clausola WHERE
in termini di gestione nulla:
craig=> SELECT 't' WHERE NULL;
?column?
----------
(0 rows)
Nelle clausole WHERE
- e in CASE
, un risultato di NULL
da un'espressione di test viene considerato come "non vero e quindi falso". In un certo senso è deplorevole che lo standard SQL non abbia reso un errore WHERE
un'espressione WHERE
invece di considerarlo falso, ma è così che è.
Questo è un altro sintomo doloroso di sdoppiamento della personalità NULL
s', dove la specifica SQL non può decidere se NULL
significa '/ valore sconosciuto non definito' o 'l'assenza di un valore', proprio come il pasticcio orribile con NULL
s e aggregati.
fonte
2013-03-14 23:52:07
Quindi è solo a causa delle specifiche SQL? Gli sviluppatori di Postgresql l'hanno appena seguito invece di fare la "cosa giusta" _? Sospettavo che fosse il caso. –
@ClodoaldoNeto Sì, ed è praticamente la politica in cui le specifiche e il mondo sano sono in conflitto. In questo caso, penso che sia abbastanza ragionevole, però; 'CASE' non è una funzione, è un'espressione speciale con le proprie regole. Le funzioni possono comunque avere una speciale gestione nulla; testimonia il 'decodifica 'di Oracle. PostgreSQL non è in grado di risolvere questo problema senza riscrivere le specifiche SQL per risolvere completamente la confusione relativa ai null, rendendola totalmente incompatibile con tutto il resto. –