[linux-l] NULL-Werte in PostgreSQL

Volker Grabsch vog at notjusthosting.com
Mi Nov 5 22:51:49 CET 2008


Olaf Radicke <briefkasten at olaf-radicke.de> schrieb:
> Am Wednesday 05 November 2008 17:31:02 schrieb Frank Reker:
> > Am Wed 05. Nov 2008 17:10 +0100 schrieb Olaf Radicke:
> > 
> > >dummy2=# UPDATE mitglied SET address_addition = ''    WHERE address_addition = NULL;
> > 
> > ... where address_addition is null;
> > 
> > so ist die syntax zumindest bei oracle und mysql.

PostgreSQL hat diese Syntax ebenfalls.

> > entsprechend gibt's auch ein "is not null"
> 
> Ja, der Tipp war richtig. Vielen dank!

Vielleicht noch eine generelle Bemerkung zu dem Effekt:

Operationen, an denen ein NULL beteiligt ist, führen bis auf
wenige Ausnahmen auch zu dem Ergebnis NULL. Das gilt nicht nur
für die Grundrechenarbeiten, sondern auch für Vergleiche. Die
Idee ist, dass ein NULL-Wert im Evaluations-Baum bis an die
Spitze "durchschlägt". Anders gesagt: Unausgefüllte Werte
sollen nicht klammheimlich ignoriert werden und für subtile,
schwer zu findene Bugs sorgen.

Daher führt auch "NULL = NULL" zum Resultat NULL. Und die
Negationen davon, also "NULL != NULL" und "NOT (NULL = NULL)",
führen ebenfalls zum Ergebnis NULL. Solch ein NULL-Ergebnis in
der WHERE-Klausel wird wie ein FALSE behandelt.

Auch wenn das auf den ersten Blick widersinnig erscheint, es
ist eine konsequente Anwendung der NULL-Regel.


Gruß,

    Volker

-- 
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR



Mehr Informationen über die Mailingliste linux-l