>Description: Joining multiple tables together in a select statement with where clauses using the "IN (...)" construct generate duplicated output rows.
>How-To-Repeat: 1. ======>>Load the following into the "test_bug" database: # MySQL dump 8.14 # # Host: localhost Database: test_bug #-------------------------------------------------------- # Server version 3.23.41 # # Table structure for table 'event' # CREATE TABLE event ( id int(11) NOT NULL auto_increment, status int(11) NOT NULL default '0', severity int(11) NOT NULL default '0', PRIMARY KEY (id), UNIQUE KEY lens_event_0 (status,severity,id) ) TYPE=MyISAM; # # Dumping data for table 'event' # INSERT INTO event VALUES (1,0,2); INSERT INTO event VALUES (2,0,2); INSERT INTO event VALUES (3,0,3); INSERT INTO event VALUES (4,0,3); INSERT INTO event VALUES (5,1,2); INSERT INTO event VALUES (6,2,3); # # Table structure for table 'severity' # CREATE TABLE severity ( severity int(11) NOT NULL default '0', description text ) TYPE=MyISAM; # # Dumping data for table 'severity' # INSERT INTO severity VALUES (0,'Unknown'); INSERT INTO severity VALUES (1,'Alert'); INSERT INTO severity VALUES (2,'Critical'); INSERT INTO severity VALUES (3,'Error'); INSERT INTO severity VALUES (4,'Warning'); INSERT INTO severity VALUES (5,'Notification'); INSERT INTO severity VALUES (6,'Informational'); INSERT INTO severity VALUES (7,'Debugging'); # # Table structure for table 'status' # CREATE TABLE status ( status int(11) NOT NULL default '0', description text ) TYPE=MyISAM; # # Dumping data for table 'status' # INSERT INTO status VALUES (0,'New'); INSERT INTO status VALUES (1,'Acknowledged'); INSERT INTO status VALUES (2,'Working'); INSERT INTO status VALUES (3,'Resolved'); INSERT INTO status VALUES (4,'Closed'); 2. ======>>Execute the query "query_normal.sql" which produces the expected output: (all 6 rows of "event" are returned) select * from event, status, severity where event.status = status.status and event.severity = severity.severity; yields a result set of 6 rows 3. ======>>Execute the query "query_failure.sql" which produces the failed output: (Note the "IN (...)" clauses should have no effect on the output) select * from event, status, severity where event.status = status.status and event.severity = severity.severity and event.status in (0,1,2) and event.severity in (2,3); yields a result set of 30 rows, with duplicated IDs >Fix: >Submitter-Id: Greg Bailey <[EMAIL PROTECTED]> >Originator: Greg Bailey >Organization: LXPRO.COM >MySQL support: none >Synopsis: Joined tables return duplicate rows with "IN (...)" construct >Severity: serious >Priority: high >Category: mysql >Class: sw-bug >Release: mysql-3.23.41 (Source distribution) >Server: /usr/bin/mysqladmin Ver 8.21 Distrib 3.23.41, for redhat-linux-gnu on i386 Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL license Server version 3.23.41 Protocol version 10 Connection Localhost via UNIX socket UNIX socket /var/lib/mysql/mysql.sock Uptime: 1 day 21 hours 54 min 25 sec Threads: 1 Questions: 3409 Slow queries: 0 Opens: 106 Flush tables: 1 Open tables: 9 Queries per second avg: 0.021 >Environment: System: Linux arizona.i-link.net 2.4.9-21 #1 Thu Jan 17 14:16:30 EST 2002 i686 unknown Architecture: i686 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/2.96/specs gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-98) Compilation info: CC='gcc' CFLAGS='-O2 -march=i386 -mcpu=i686 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE' CXX='c++' CXXFLAGS='-O2 -march=i386 -mcpu=i686 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE' LDFLAGS='' LIBC: lrwxrwxrwx 1 root root 13 Dec 14 16:16 /lib/libc.so.6 -> libc-2.2.4.so -rwxr-xr-x 2 root root 1283964 Dec 8 07:14 /lib/libc-2.2.4.so -rw-r--r-- 1 root root 27314296 Dec 8 07:02 /usr/lib/libc.a -rw-r--r-- 1 root root 178 Dec 8 07:02 /usr/lib/libc.so Configure command: ./configure i386-redhat-linux --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info --without-debug --without-readline --enable-shared --with-extra-charsets=complex --with-bench --localstatedir=/var/lib/mysql --with-unix-socket-path=/var/lib/mysql/mysql.sock --with-mysqld-user=mysql --with-extra-charsets=all --disable-assember --with-berkeley-db --enable-large-files=yes --enable-largefile=yes --with-thread-safe-client --enable-assembler --------------------------------------------------------------------- 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