Re: NULLIF() didn't work in where clause Temp.sol.

Remo Tex <[email protected]> Sat, 28 May 2005 08:05:56 +0300
Newsgroups gmane.comp.db.mysql.bugs
Message-ID <[email protected]>
Confirmed!
Same problem here
В· Server: 4.0.24-standard-log
В· Client: 3.23.52
В· Protocol-Version: 10
  I can see as temporary solution/fix only this:
Try
   where NULLIF(A,'') <=> NULL
instead of
   where NULLIF(A,'') IS NULL

P.S. Seems if IS NULL skipped it show correctly the other two rows yet 
if IS NOT NULL is the culprit it show 3 rows so... 1 row must be both 
NULL and NOT NULL at the same time :-)
Hope to see this fixed soon...

select * from testcase where NULLIF(A,'') IS NULL;
ID=3
select * from testcase where NULLIF(A,'') IS NOT NULL;
ID=1,2,4
select * from testcase where NULLIF(A,'');
ID=1,4

select * from testcase where NULLIF(A,'')<=>NULL;
ID=2,3 /* as expected yet this is mysql specific I think ... */
Rene Fertig wrote:
> Hello.
> 
> I'm sure if I discovered a real bug, but it seem so to me.
> 
> The manual said about NULLIF():
> 
> NULLIF(expr1,expr2)
>     If expr1 = expr2 is true, return NULL else return expr1.
> 
> So when I do something like:
> 
> create table testcase (
>   ID  int unsigned NOT NULL auto_increment,
>   A   enum('Y','N') default NULL,
>   B   enum('Y','N') default NULL,
>   C   char(10),
>   primary key (ID)
> );
> 
> insert into testcase (A,B,C) values ('Y','N','Test1'), (NULL,'','Test2'), 
> ('','',NULL), ('N','Y', '');
> 
> select * from testcase;
> +----+------+------+-------+
> | ID | A    | B    | C     |
> +----+------+------+-------+
> |  1 | Y    | N    | Test1 |
> |  2 | NULL |      | Test2 |
> |  3 |      |      | NULL  |
> |  4 | N    | Y    |       |
> +----+------+------+-------+
> 4 rows in set (0.00 sec)
> 
> select ID, B, NULLIF(B,'') from testcase where NULLIF(B,'') is NULL;
> +----+------+--------------+
> | ID | B    | NULLIF(B,'') |
> +----+------+--------------+
> |  2 |      | NULL         |
> |  3 |      | NULL         |
> +----+------+--------------+
> 2 rows in set (0.00 sec)
> 
> This looks ok.
> 
> But:
> 
> select ID, A, NULLIF(A,'') from testcase where NULLIF(A,'') is NULL;
> +----+------+--------------+
> | ID | A    | NULLIF(A,'') |
> +----+------+--------------+
> |  3 |      | NULL         |
> +----+------+--------------+
> 1 row in set (0.00 sec)
> 
> where is the row whit ID 2? It should be there, because NULLIF(A,'') should 
> evaluate to NULL (A ist not equal '' so it returns A, which is NULL).
> 
> In the select part, NULLIF evaluates correct:
> 
> select ID, A, NULLIF(A,'') from testcase;
> +----+------+--------------+
> | ID | A    | NULLIF(A,'') |
> +----+------+--------------+
> |  1 | Y    | Y            |
> |  2 | NULL | NULL         |
> |  3 |      | NULL         |
> |  4 | N    | N            |
> +----+------+--------------+
> 4 rows in set (0.00 sec)
> 
> The same with a char field:
> 
> select ID, C, NULLIF(C,'') from testcase where NULLIF(C,'') is NULL;
> +----+------+--------------+
> | ID | C    | NULLIF(C,'') |
> +----+------+--------------+
> |  4 |      | NULL         |
> +----+------+--------------+
> 1 row in set (0.00 sec)
> 
> 
> I'm just updated to 4.1.12-Max which is the current stable, because the 
> version 4.0.18-Max, which I used before, has a similar but inverse bug whith 
> NULLIF. There only the rows where the values are NULL occur within the 
> result, but not the empty ones.
> 
> So my question is: Is this really a bug or did I do anything wrong? Perhaps I 
> missed something in the documentation?
> 
> Kind regards
> 
> 	Rene
> 
> 

-- 
MySQL Bugs Mailing List
For list archives: http://lists.mysql.com/bugs
To unsubscribe:    http://lists.mysql.com/[email protected]