The manual calls '<=>', which was added in 3.23.0, the 'null safe operator', and says...
- If one or both arguments are `NULL', the result of the comparison is `NULL', except for the `<=>' operator. - indexes can use = and <=> but the <=> operator is not in SQL92, and AFAIK no other major db supports it, so if you want portability, IS | IS NOT NULL is preferable. PB ----- > At 12:38 -0500 11/19/02, Arthur Fuller wrote: > >Nothing can be compared to null, not even null, which implies that MySQL is > >wrong in returning two rows in the SELECT. Your query needs to say IS NULL: > > > > delete from t where id = 1 and num is null; > > > >Arthur > > That is false. The <=> operator is like = except that it is also true > for NULL comparisons. And when I try the queries below using <=>, the > records containing NULL *are* deleted. I'm not sure why David is observing > different behavior. > > > > >-----Original Message----- > >From: Andrew Braithwaite [mailto:[EMAIL PROTECTED]] > >Sent: Tuesday, November 19, 2002 12:26 PM > >To: [EMAIL PROTECTED] > >Cc: '[EMAIL PROTECTED]' > >Subject: RE: delete where column <=> null > > > > > >David, > > > >I get the same behaviour with mysql 3.23.47 (not max) and with mysql v > >4.0.4-beta > > > >Without the index it works fine. Must be a bug.... > > > >Cheers, > > > >Andrew > > > >-----Original Message----- > >From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] > >Sent: 19 November 2002 16:45 > >To: [EMAIL PROTECTED] > >Subject: delete where column <=> null > > > > > >Hi, > > > >I'm trying to delete from a table where col <=> null, but it doesn't seem to > >work. I don't see anything in the manual that says that <=> can't be used in > >the where clause of a delete statment, but: > > > > > >mysql> select * from t; > >+----+------+ > >| id | num | > >+----+------+ > >| 1 | NULL | > >| 1 | NULL | > >+----+------+ > >4 rows in set (0.00 sec) > > > >mysql> delete from t where id = 1 and num <=> null; > >Query OK, 0 rows affected (0.00 sec) > > > >mysql> select * from t where id = 1 and num <=> null; > >+----+------+ > >| id | num | > >+----+------+ > >| 1 | NULL | > >| 1 | NULL | > >+----+------+ > >2 rows in set (0.00 sec) > > > > > > > >This behavior seems very bizarre and counter-intuitive to me, but it's such > >an obvious bug that I'm afraid it must be a feature and not a bug. Can > >anyone help/explain? > > > >Using "is null" in the where clause works, of course, but would be > >relatively cumbersome to use. > > > >Db is 3.23.53-max-nt > > > >Thanks, > > > >-David > > > >p.s. in case it's relevant, there is a unique index on (id,num): > > > >create table t ( > > id integer not null, > > num integer, > > unique index id_num_idx(id,num) > >); > > > --------------------------------------------------------------------- > Before posting, please check: > http://www.mysql.com/manual.php (the manual) > http://lists.mysql.com/ (the list archive) > > To request this thread, e-mail <[EMAIL PROTECTED]> > To unsubscribe, e-mail <[EMAIL PROTECTED]> > Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php > > > --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php