Bug #31797 | error while parsing subqueries -- WHERE is parsed as HAVING | ||
---|---|---|---|
Submitted: | 23 Oct 2007 18:58 | Modified: | 25 Jan 2008 19:28 |
Reporter: | Maciej Pilichowski | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Errors | Severity: | S3 (Non-critical) |
Version: | 5.0.45 | OS: | Any |
Assigned to: | Martin Hansson | CPU Architecture: | Any |
[23 Oct 2007 18:58]
Maciej Pilichowski
[23 Oct 2007 21:03]
Sveta Smirnova
Thank you for the report. Please provide output of SHOW CREATE TABLE B;
[24 Oct 2007 7:49]
Maciej Pilichowski
CREATE TABLE `B` ( `T` varchar(100) collate utf8_polish_ci default NULL, `C` decimal(9,2) default NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci
[24 Oct 2007 9:57]
Hartmut Holzgraefe
I'm getting ERROR 1247 (42S22): Reference 'MC' not supported (reference to group function) instead which is correct ... mysql> CREATE TABLE `B` ( -> `T` varchar(100) collate utf8_polish_ci default NULL, -> `C` decimal(9,2) default NULL -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci; Query OK, 0 rows affected (0.50 sec) mysql> select max(C) MC,(select T from B IB where IB.C=MC) from B; ERROR 1247 (42S22): Reference 'MC' not supported (reference to group function)
[24 Oct 2007 10:09]
Sveta Smirnova
Thank you for the feedback. I get same correct results as Hartmut. Please indicate accurate version of package you use (file name), operating system and provide your configuration file.
[24 Oct 2007 10:23]
Maciej Pilichowski
This is strange. This table is an excerpt from the bigger one I use, but the other fields are irrelevant here. Anyway, data you asked for. MySQL-client-community-5.0.45-0.sles10 mysql-administrator-5.0r12-1suse10 MySQL-server-community-5.0.45-0.sles10 mysql-migration-toolkit-5.0r12-1suse10 MySQL-devel-community-5.0.45-0.sles10 mysql-gui-tools-5.0r12-1suse10 MySQL-shared-community-5.0.45-0.sles10 mysql-query-browser-5.0r12-1suse10 And configuration file: [mysql] default-character-set = latin2 [mysqld] character-set-server = utf8 collation-server = utf8_polish_ci sql-mode=ONLY_FULL_GROUP_BY,PIPES_AS_CONCAT,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO max_sp_recursion_depth = 255
[24 Oct 2007 10:50]
Sveta Smirnova
Thank you for the provided information. Cause is ONLY_FULL_GROUP_BY: mysql> select max(C) MC,(select T from B IB where IB.C=MC) from B; ERROR 1247 (42S22): Reference 'MC' not supported (reference to group function) mysql> set @@sql_mode='ONLY_FULL_GROUP_BY'; Query OK, 0 rows affected (0.00 sec) mysql> select max(C) MC,(select T from B IB where IB.C=MC) from B; ERROR 1463 (42000): non-grouping field 'MC' is used in HAVING clause
[4 Jan 2008 12:37]
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/commits/40555 ChangeSet@1.2546, 2008-01-04 13:41:11+01:00, mhansson@linux-st28.site +3 -0 Bug#31797: error while parsing subqueries -- WHERE is parsed as HAVING The name resolution for correlated subqueries and HAVING clauses failed to distinguish which of two was being performed when there was a reference to an outer aliased field. Fixed by adding the condition that HAVING clause name resulotion is being performed.
[11 Jan 2008 11:55]
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/commits/40905 ChangeSet@1.2546, 2008-01-11 12:55:04+01:00, mhansson@client-10-129-10-216.upp.off.mysql.com +3 -0 Bug#31797: error while parsing subqueries -- WHERE is parsed as HAVING The name resolution for correlated subqueries and HAVING clauses failed to distinguish which of two was being performed when there was a reference to an outer aliased field. Fixed by adding the condition that HAVING clause name resulotion is being performed.
[11 Jan 2008 15:48]
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/commits/40913 ChangeSet@1.2546, 2008-01-11 16:48:33+01:00, mhansson@client-10-129-10-216.mysql.com +3 -0 Bug#31797: error while parsing subqueries -- WHERE is parsed as HAVING The name resolution for correlated subqueries and HAVING clauses failed to distinguish which of two was being performed when there was a reference to an outer aliased field. Fixed by adding the condition that HAVING clause name resulotion is being performed.
[11 Jan 2008 17:51]
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/commits/40927 ChangeSet@1.2546, 2008-01-11 18:50:54+01:00, mhansson@linux-st28.site +3 -0 Bug#31797: error while parsing subqueries -- WHERE is parsed as HAVING The name resolution for correlated subqueries and HAVING clauses failed to distinguish which of two was being performed when there was a reference to an outer aliased field. Fixed by adding the condition that HAVING clause name resulotion is being performed.
[24 Jan 2008 11:56]
Bugs System
Pushed into 6.0.5-alpha
[24 Jan 2008 12:01]
Bugs System
Pushed into 5.1.24-rc
[24 Jan 2008 12:02]
Bugs System
Pushed into 5.0.56
[25 Jan 2008 19:28]
Paul DuBois
Noted in 5.0.56, 5.1.23, 6.0.5 changelogs. Name resolution for correlated subqueries and HAVING clauses failed to distinguish which of two was being performed when there was a reference to an outer aliased field. This could result in error messages about a HAVING clause for queries that had no such clause.