Bug #69471 | UNION of derived tables returns wrong results with "1=0/false"-clauses | ||
---|---|---|---|
Submitted: | 14 Jun 2013 13:26 | Modified: | 17 Jul 2013 16:46 |
Reporter: | Christian Rijke | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Optimizer | Severity: | S3 (Non-critical) |
Version: | 5.6.10 | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | 1=0, query, regression, UNION |
[14 Jun 2013 13:26]
Christian Rijke
[14 Jun 2013 13:34]
Christian Rijke
Experienced this in 5.6.10 but not in 5.5-versions.
[14 Jun 2013 14:23]
MySQL Verification Team
Thank you for the bug report. [miguel@tikal 5.6]$ bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.13 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> CREATE TABLE table1 ( a INT, b INT); Query OK, 0 rows affected (0.44 sec) mysql> mysql> CREATE TABLE table2 ( a INT, b INT); Query OK, 0 rows affected (0.43 sec) mysql> mysql> INSERT INTO table1 VALUES (1, 4); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO table1 VALUES (2, 4); Query OK, 1 row affected (0.04 sec) mysql> INSERT INTO table2 VALUES (1, 5); Query OK, 1 row affected (0.23 sec) mysql> INSERT INTO table2 VALUES (2, 5); Query OK, 1 row affected (0.04 sec) mysql> mysql> SELECT * -> FROM ( -> (SELECT * -> FROM table1 -> WHERE 1=0) -> UNION -> (SELECT * -> FROM (SELECT * from table2) t2 -> WHERE t2.b = 5) -> ) a3 -> ; +------+------+ | a | b | +------+------+ | 2 | 5 | +------+------+ 1 row in set (0.00 sec) mysql> exit Bye [miguel@tikal 5.6]$ bin/mysqladmin -uroot shutdown [miguel@tikal 5.6]$ cd .. [miguel@tikal bzr]$ cd 5.5 [miguel@tikal 5.5]$ bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.33-debug Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> CREATE TABLE table1 ( a INT, b INT); Query OK, 0 rows affected (0.13 sec) mysql> mysql> CREATE TABLE table2 ( a INT, b INT); Query OK, 0 rows affected (0.11 sec) mysql> mysql> INSERT INTO table1 VALUES (1, 4); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO table1 VALUES (2, 4); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO table2 VALUES (1, 5); Query OK, 1 row affected (0.04 sec) mysql> INSERT INTO table2 VALUES (2, 5); Query OK, 1 row affected (0.06 sec) mysql> mysql> SELECT * -> FROM ( -> (SELECT * -> FROM table1 -> WHERE 1=0) -> UNION -> (SELECT * -> FROM (SELECT * from table2) t2 -> WHERE t2.b = 5) -> ) a3 -> ; +------+------+ | a | b | +------+------+ | 1 | 5 | | 2 | 5 | +------+------+ 2 rows in set (0.01 sec) mysql>
[24 Jun 2013 20:49]
Rahul Gulati
This works correctly in 5.1 as well. I might take this up and provide a patch/fix.
[17 Jul 2013 16:46]
Paul DuBois
Noted in 5.6.13, 5.7.2 changelogs. When selecting a union of an empty result set (created with WHERE 1=0 or WHERE FALSE) with a derived table, incorrect filtering was applied to the derived table.