Details
-
Bug
-
Status: Closed (View Workflow)
-
Minor
-
Resolution: Fixed
-
10.0.4, 5.5.32, 5.3.12
-
None
-
None
Description
The first test case returns 1 row on 5.3, 5.5, 10.0, and two rows on 5.2, MySQL 5.5, MySQL 5.6. Two rows is the correct result.
CREATE TABLE t1 (a INT, c1 VARCHAR(1)) ENGINE=MyISAM; |
INSERT INTO t1 VALUES (2,'x'),(8,'d'); |
|
CREATE TABLE t2 (m INT, n INT, c2 VARCHAR(1)) ENGINE=MyISAM; |
INSERT INTO t2 VALUES (0, 5, 'x'),(1, 4,'p'); |
|
SELECT * FROM t1 WHERE c1 NOT IN ( |
SELECT t2a.c2 FROM t2 AS t2a, t2 AS t2b, t2 AS t2c |
WHERE t2c.c2 = t2b.c2 AND ( t2a.m = t2b.n OR 0 ) AND ( t2b.m != a OR t2b.m = t2a.m ) |
);
|
Actual result:
a c1
|
8 d
|
Expected result:
a c1
|
2 x
|
8 d
|
The second test case is a variation of the first one, only instead of the constant '0' condition we use IN subquery from a constant (empty) table. This test case returns the correct result on 5.3, but fails on 5.5.
CREATE TABLE t1 (a INT, c1 VARCHAR(1)) ENGINE=MyISAM; |
INSERT INTO t1 VALUES (2,'x'),(8,'d'); |
|
CREATE TABLE t2 (m INT, n INT, c2 VARCHAR(1)) ENGINE=MyISAM; |
INSERT INTO t2 VALUES (0, 5, 'x'),(1, 4,'p'); |
|
CREATE TABLE t3 (i INT) ENGINE=MyISAM; |
|
SELECT * FROM t1 WHERE c1 NOT IN ( |
SELECT t2a.c2 FROM t2 AS t2a, t2 AS t2b, t2 AS t2c |
WHERE t2c.c2 = t2b.c2 AND ( t2a.m = t2b.n OR 1 IN ( SELECT i FROM t3 ) ) AND ( t2b.m != a OR t2b.m = t2a.m ) |
);
|
5.3 result:
a c1
|
2 x
|
8 d
|
5.5 result:
a c1
|
8 d
|
bzr version-info
|
revision-id: igor@askmonty.org-20130830040242-tns2ir3y9rht6n19
|
revno: 3687
|
branch-nick: 5.3
|
bzr version-info
|
revision-id: psergey@askmonty.org-20130903144107-csv06zecpkp27oj0
|
revno: 3876
|
branch-nick: 5.5
|