Bug #9350 ALL/ANY subqueries work incorrectly with HAVING clause

Submitted: 23 Mar 2005 9:04 Modified: 11 Apr 2005 2:17
Reporter: Oleksandr Byelkin Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server Severity:S2 (Serious)
Version:4.1 OS:Any (all)
Assigned to: Oleksandr Byelkin CPU Architecture:Any

[23 Mar 2005 9:04] Oleksandr Byelkin
Description:
following queries results do not much to results of queries in which HAVING clause replaced with WHERE one:
SELECT a FROM t1 WHERE a > ANY ( SELECT a FROM t1 HAVING b = 2 );
SELECT a FROM t1 WHERE a < ANY ( SELECT a FROM t1 HAVING b = 2 );
SELECT a FROM t1 WHERE a = ANY ( SELECT a FROM t1 HAVING b = 2 );
SELECT a FROM t1 WHERE a >= ANY ( SELECT a FROM t1 HAVING b = 2 );
SELECT a FROM t1 WHERE a <= ANY ( SELECT a FROM t1 HAVING b = 2 );
SELECT a FROM t1 WHERE a <> ANY ( SELECT a FROM t1 HAVING b = 2 );
SELECT a FROM t1 WHERE a > ALL ( SELECT a FROM t1 HAVING b = 2 );
SELECT a FROM t1 WHERE a < ALL ( SELECT a FROM t1 HAVING b = 2 );
SELECT a FROM t1 WHERE a = ALL ( SELECT a FROM t1 HAVING b = 2 );
SELECT a FROM t1 WHERE a >= ALL ( SELECT a FROM t1 HAVING b = 2 );
SELECT a FROM t1 WHERE a <= ALL ( SELECT a FROM t1 HAVING b = 2 );
SELECT a FROM t1 WHERE a <> ALL ( SELECT a FROM t1 HAVING b = 2 );
SELECT a FROM t1 WHERE a > ANY ( SELECT a FROM t1 HAVING b = 2 UNION SELECT a FROM t1 HAVING b = 2);
SELECT a FROM t1 WHERE a < ANY ( SELECT a FROM t1 HAVING b = 2 UNION SELECT a FROM t1 HAVING b = 2);
SELECT a FROM t1 WHERE a = ANY ( SELECT a FROM t1 HAVING b = 2 UNION SELECT a FROM t1 HAVING b = 2);
SELECT a FROM t1 WHERE a >= ANY ( SELECT a FROM t1 HAVING b = 2 UNION SELECT a FROM t1 HAVING b = 2);
SELECT a FROM t1 WHERE a <= ANY ( SELECT a FROM t1 HAVING b = 2 UNION SELECT a FROM t1 HAVING b = 2);
SELECT a FROM t1 WHERE a <> ANY ( SELECT a FROM t1 HAVING b = 2 UNION SELECT a FROM t1 HAVING b = 2);
SELECT a FROM t1 WHERE a > ALL ( SELECT a FROM t1 HAVING b = 2 UNION SELECT a FROM t1 HAVING b = 2);
SELECT a FROM t1 WHERE a < ALL ( SELECT a FROM t1 HAVING b = 2 UNION SELECT a FROM t1 HAVING b = 2);
SELECT a FROM t1 WHERE a = ALL ( SELECT a FROM t1 HAVING b = 2 UNION SELECT a FROM t1 HAVING b = 2);
SELECT a FROM t1 WHERE a >= ALL ( SELECT a FROM t1 HAVING b = 2 UNION SELECT a FROM t1 HAVING b = 2);
SELECT a FROM t1 WHERE a <= ALL ( SELECT a FROM t1 HAVING b = 2 UNION SELECT a FROM t1 HAVING b = 2);
SELECT a FROM t1 WHERE a <> ALL ( SELECT a FROM t1 HAVING b = 2 UNION SELECT a FROM t1 HAVING b = 2);

How to repeat:
above subqueries are rewritten subqueries with WHERE clause in subselect.test
just add them after
#
# ALL/ANY test
#
CREATE TABLE t1 ( a int, b int );
INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
and compare results with analog with WHERE clause
[23 Mar 2005 9:59] Oleksandr Byelkin
subqueries above are wrong, (SELECT b) should be used instead of b in HAVING clause for correct name resolving. But results are still wrong even after this change
[30 Mar 2005 7:07] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/internals/23462
[30 Mar 2005 20:14] Oleksandr Byelkin
Thank you for bugreport. bugfix is pushed into source tree marked as 4.1.11.
[11 Apr 2005 2:17] Paul DuBois
Noted in 4.1.11 changelog.

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.062 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.