| Bug #28526 | Correlated subquery with GROUP BY on outer query returns no results in 5.0.40+ | ||
|---|---|---|---|
| Submitted: | 18 May 2007 17:15 | Modified: | 31 May 2007 5:52 | 
| Reporter: | Zak Kipling | Email Updates: | |
| Status: | Duplicate | Impact on me: | |
| Category: | MySQL Server | Severity: | S2 (Serious) | 
| Version: | 5.0.40, 5.0.41, 5.0.42-20070517 | OS: | Any | 
| Assigned to: | Assigned Account | CPU Architecture: | Any | 
| Tags: | bfsm_2007_05_31, regression | ||
   [20 May 2007 16:45]
   MySQL Verification Team        
  verified exactly as described in initial report. >=5.0.40 returned 0 rows, < 5.0.40 returned 1 row.
mysql> select version();
+--------------+
| version()    |
+--------------+
| 5.0.42-debug |
+--------------+
<cut>
mysql> SELECT location FROM subquery_bug_test AS a
    ->   WHERE location=2
    ->     AND location=( SELECT location FROM subquery_bug_test AS b
    ->                      WHERE a.ref=b.ref
    ->                        AND b.location=2
    ->                      LIMIT 1 )
    ->   GROUP BY location;
Empty set (0.03 sec)
------------------
mysql> select version();
+--------------------------+
| version()                |
+--------------------------+
| 5.0.36-enterprise-gpl-nt |
+--------------------------+
1 row in set (0.00 sec)
<cut>
mysql> SELECT location FROM subquery_bug_test AS a
    ->   WHERE location=2
    ->     AND location=( SELECT location FROM subquery_bug_test AS b
    ->                      WHERE a.ref=b.ref
    ->                        AND b.location=2
    ->                      LIMIT 1 )
    ->   GROUP BY location;
+----------+
| location |
+----------+
|        2 |
+----------+
1 row in set (0.00 sec)
 
   [31 May 2007 5:52]
   Igor Babaev        
  This bug is a duplicate of bug #28337 which is already fixed: mysql> SELECT VERSION(); +--------------+ | VERSION() | +--------------+ | 5.0.44-debug | +--------------+ 1 row in set (0.00 sec) mysql> CREATE TABLE subquery_bug_test (ref BIGINT not null, location BIGINT not null); Query OK, 0 rows affected (0.49 sec) mysql> INSERT INTO subquery_bug_test (ref, location) VALUES (1,2); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO subquery_bug_test (ref, location) VALUES (3,2); Query OK, 1 row affected (0.00 sec) mysql> mysql> SELECT location FROM subquery_bug_test AS a -> WHERE location=2 -> AND location=( SELECT location FROM subquery_bug_test AS b -> WHERE a.ref=b.ref -> AND b.location=2 -> LIMIT 1 ) -> GROUP BY location; +----------+ | location | +----------+ | 2 | +----------+ 1 row in set (0.01 sec)


Description: This appears to be a regression in 5.0.40 relative to 5.0.38. On MySQL 5.0.38, the following returns one row as I would expect, while on 5.0.40, 5.0.41 and the 5.0.42-20070517 snapshot it returns none. CREATE TABLE subquery_bug_test (ref BIGINT not null, location BIGINT not null); -- Note that having two rows with the same "location" field -- is necessary for the bug to manifest. INSERT INTO subquery_bug_test (ref, location) VALUES (1,2); INSERT INTO subquery_bug_test (ref, location) VALUES (3,2); -- Returns one row on 5.0.38 but none on 5.0.40+ -- (yes, the two "location=" clauses are superfluous, but -- the "location=2" one was originally an IN clause with several values -- this -- is heavily stripped down) SELECT location FROM subquery_bug_test AS a WHERE location=2 AND location=( SELECT location FROM subquery_bug_test AS b WHERE a.ref=b.ref AND b.location=2 LIMIT 1 ) GROUP BY location; Initially I thought this might be the same issue as bug #27333, but applying the proposed patch for that bug doesn't appear to fix the problem. How to repeat: Run the above SQL fragment on one of the affected versions of the MySQL server.