phpbar.de logo

Mailinglisten-Archive

SQL-Problem

SQL-Problem

Wolfgang Hauck wbh at euta.net
Die Feb 11 10:40:41 CET 2003


>Hi Wolfgang,

>> NULL != 0
>sach ich doch !
>Aber es hoert ja keiner zu ... ;-)

>Und ansonsten ging es um Char-Fields die leer sind.
>Er sucht nach IS NULL und findet nix, weil '' drin
>steht. Erklaer Du es ihm doch noch mal ... ;-)

Hi Norbert,

Hat a bisserl gedauert (es gibt ja noch was anderes als am Computer 
rumhacken ;-) ), aber ich versuchs mal.

In

http://www.mysql.com/doc/en/Problems_with_NULL.html

ist das eigentlich recht gut beschrieben, aber bei manchen Leuten haperts 
an der Sprache (englisch) ;-)

Da steht z.B.:

Das Konzept der NULL - Werte ist ein bekanntes Problem von MySQL - 
Anfängern die oft glauben, dass NULL - Werte das selbe seien wie leere 
Strings. Dies ist aber nicht der Fall. Diese zwei Query - Anfragen sind 
z.B.: völlig verschieden:

mysql> INSERT INTO my_table (phone) VALUES (NULL);
mysql> INSERT INTO my_table (phone) VALUES ("");

Beide Anfragen fügen einen Wert in das Feld phone ein, aber die erste füllt 
das Feld mit einen NULL - Wert während
die zweite einen leeren String einfügt. Der erste Wert (NULL) könnte 
bedeuten, dass die Telefonnummer nicht bekannt ist, der zweite Wert ('') 
besagt, dass die betreffende Person gar kein Telefon hat.

In SQL ist ein Vergleich mit jedem anderen Wert (auch '') immer false 
(ausser mit NULL selbst). Ein Ausdruck (expression) der einen NULL - Wert 
enthält erzeugt immer einen NULL - Wert, da die Interpretation der 
 Operatoren und Funktionen sonst zu kompliziert werden würden. Alle Felder 
im folgenden Beispiel erzeugen einen NULL - Wert:

mysql> SELECT NULL,1+NULL,CONCAT('Invisible',NULL);

Wenn Sie nach einem Feld mit einem NULL - Wert suchen wollen können Sie 
nicht "= NULL" verwenden. Der folgende Ausdruck gibt keine Reihen zurück, 
da expr = NULL false zurückgibt, wie bei allen Vergleichen:

mysql> SELECT * FROM my_table WHERE phone = NULL;

Um nach NULL - Werten zu suchen, müssen Sie IS NULL verwenden. Die 
folgenden Beispiele zeigen Ihnen wie Sie die NULL - Werte (unbekannte 
Telefonnummer) und die Leute die kein Telefon haben finden können:

mysql> SELECT * FROM my_table WHERE phone IS NULL;
mysql> SELECT * FROM my_table WHERE phone = "";

[...]

Der Rest sind Ausnahmen und Besonderheiten... (spar ich mir jetzt ;-) )

Wenn er es jetzt net kapiert soll er Tetris spielen ;-))

MfG Wolfgang








-- 
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 


php::bar PHP Wiki   -   Listenarchive