Date: Sat, 2 Nov 2002 05:09:44 +0000
From: Kevin McManus <[EMAIL PROTECTED]>
To: [EMAIL PROTECTED]
Subject: behaviour of WHERE statement with NULL fields
User-Agent: Mutt/1.4i

>Description:
        The WHERE statement does not correctly return rows matching NULL
        fields when using NOT with IN, LIKE or REGEXP - or using REGEXP
        with negation ^

>How-To-Repeat:
        Please see the SQL at the foot of this email for the bugtest table
        SELECT * FROM bugtest WHERE grp IN ('A','B')
           Correctly returns rows where grp is 'A' or 'B'
        SELECT * FROM bugtest WHERE grp NOT IN ('A','B')
           Returns rows where grp is 'C' but fails to return rows where
           grp is NULL (but clearly not 'A' or 'B')
        SELECT * FROM bugtest WHERE grp NOT LIKE 'A'
           Returns only rows where grp is 'B' and 'C' but not NULL
        SELECT * FROM bugtest WHERE grp NOT LIKE '_'
           Returns no rows but NULL is not like a single character
        SELECT * FROM bugtest WHERE grp REGEXP '[AB]'
           Returns rows where grp matches 'A' or 'B'
        SELECT * FROM bugtest WHERE grp REGEXP '[^AB]'
           Returns rows where grp is 'C' but fails to return rows where
           grp is NULL

>Fix:
        Use IS NULL
        SELECT * FROM bugtest WHERE grp IS NULL OR grp REGEXP '[^AB]'
        Returns what would be expected from the last How-To-Repeat example

>Submitter-Id:  <submitter ID>
>Originator:    Kevin McManus
>Organization:
        School of Computing & Math Science
        The University of Greenwich
        Park Row, Greenwich
        London SE10 9LS  UK
>
>MySQL support: none
>Synopsis:      behaviour of WHERE statement with NULL fields
>Severity:      medium
>Priority:      low
>Category:      mysql
>Class:         sw-bug
>Release:       mysql-3.23.41 (Source distribution)

>Environment:
        <machine, os, target, libraries (multiple lines)>
System: Linux raq566.uk2net.com 2.2.16C28_III #1 Mon Jul 30 22:07:58 PDT 2001 i586 
unknown
Architecture: i586

Some paths:  /usr/bin/perl /usr/bin/make /usr/bin/gmake /usr/bin/gcc /usr/bin/cc
GCC: Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/specs
gcc version egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)
Compilation info: CC='gcc'  CFLAGS=''  CXX='c++'  CXXFLAGS=''  LDFLAGS=''
LIBC:
lrwxrwxrwx   1 root     root           13 Jan 20  2001 /lib/libc.so.6 -> libc-2.1.3.so
-rwxr-xr-x   1 root     root      4101836 Sep  5  2000 /lib/libc-2.1.3.so
-rw-r--r--   1 root     root     20273284 Sep  5  2000 /usr/lib/libc.a
-rw-r--r--   1 root     root          178 Sep  5  2000 /usr/lib/libc.so
lrwxrwxrwx   1 root     root           19 Sep 26  2001 /usr/lib/libc-client.a -> 
/usr/lib/c-client.a
Configure command: ./configure  --prefix=/usr/local/mysql 
--with-unix-socket-path=/tmp/mysql.sock --with-mysqld-user=mysql
Perl: This is perl, version 5.005_03 built for i386-linux

CREATE TABLE bugtest (
  id int(11) NOT NULL auto_increment,
  name varchar(16) default NULL,
  grp char(1) binary default NULL,
  PRIMARY KEY  (id)
) TYPE=MyISAM;

#
# Dumping data for table 'bugtest'
#

INSERT INTO bugtest VALUES (1,'fred','A');
INSERT INTO bugtest VALUES (2,'joe','B');
INSERT INTO bugtest VALUES (3,'bert','C');
INSERT INTO bugtest VALUES (4,'sally',NULL);
INSERT INTO bugtest VALUES (5,'sue','B');
INSERT INTO bugtest VALUES (6,'alan',NULL);
INSERT INTO bugtest VALUES (7,'cathy','A');
INSERT INTO bugtest VALUES (8,'mary','C');

PS An earlier attempt to post this report appears to have failed
   Apologies if this is a repeat posting

[EMAIL PROTECTED] - http://staffweb.cms.gre.ac.uk/~k.mcmanus
--------------------------------------------------------------
Dr Kevin McManus                     ||Queen Mary 413
School of Computing & Math Science   ||
The University of Greenwich          ||
Park Row, Greenwich                  ||Tel +44 (0)208 331 8719 
London SE10 9LS  UK                  ||Fax +44 (0)208 331 8665

---------------------------------------------------------------------
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

Reply via email to