Mailinglisten-Archive |
>>> ü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