phpbar.de logo

Mailinglisten-Archive

NULL / NOT NULL

NULL / NOT NULL

Sandor Wonschik Sandor.Wonschik at arvato-mobile.de
Mon Jun 27 17:48:40 CEST 2005


>>> übrigens erfüllt ein leerer string aber auch die not null bedingung
>> nein!
> doch , ein leerer string ist NOT NULL
 
Vielleicht hilft Euch das ja: ;-)

select if('' is not null, "'' is not null", "'' is null") as SoIsses
=> '' is not null

select if(null is not null, 'null is not null', 'null is null') as SoIsses
=> null is null


Wo NOT NULL aber auch Sinn macht: 
Wenn man mit LEFT JOIN arbeitet und feststellen will, ob ein passender Eintrag in der zweiten Tabelle drin ist, ist die Feld-Eigenschaft NOT NULL nützlich.

select count(*)
from table1
left join table2 on table1.field1 = table2.field2
where table2.field2 is null

Mal angenommen, table2.field2 wäre ein Feld, das NULL-Einträge erlaubt (und es wäre auch tatsächlich Einträge mit NULL drin), könnte man mit dieser Query nicht herausfinden, welche Einträge in der zweiten Tabelle fehlen.


Hier was zum Ausprobieren, was vielleicht etwas Licht ins Dunkel bringt:

CREATE TABLE table1 (
  field1 char(1) NOT NULL default '',
  field2 char(1) default ''
) TYPE=MyISAM;

INSERT INTO table1 VALUES ('1','a');
INSERT INTO table1 VALUES ('2','b');
INSERT INTO table1 VALUES ('3',NULL);


CREATE TABLE table2 (
  field1 char(1) default NULL,
  field2 char(1) NOT NULL default ''
) TYPE=MyISAM;

INSERT INTO table2 VALUES ('a','x');
INSERT INTO table2 VALUES (NULL,'z');


SELECT table1.*
FROM table1
LEFT JOIN table2 ON table1.field2 = table2.field1
WHERE table2.field1 IS NULL

Was man vielleicht als Ergebnis erwartet:
'2','b'

Was aber rauskommt:
'2','b'
'3',NULL

Denn bei LEFT JOIN matcht NULL nicht auf NULL:
'1','a' <=> 'a','x'			=> OK
'3',NULL <=> NULL,'z'		=> nicht OK


Wenn man bei table2 das field1 als NOT NULL definiert, arbeitet alles so wie erwartet - u.a. weil man gar keinen Eintrag (NULL,'z') anlegen kann.


:-) Sandor



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


php::bar PHP Wiki   -   Listenarchive