| Bug #69648 | Subselect of literals in FROM throws "Duplicate column name" error | ||
|---|---|---|---|
| Submitted: | 2 Jul 2013 16:04 | Modified: | 15 Jul 2013 6:55 |
| Reporter: | David Wheeler | Email Updates: | |
| Status: | Verified | Impact on me: | |
| Category: | MySQL Server: DML | Severity: | S3 (Non-critical) |
| Version: | 5.6.12 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
| Tags: | duplicate column name, from, subselect | ||
[2 Jul 2013 16:04]
David Wheeler
[2 Jul 2013 16:27]
David Wheeler
Wrong query in the example (cut-and-paste error), sorry. Here is the correct one: mysql> select * from (select 'foo', 'foo') AS f; ERROR 1060 (42S21): Duplicate column name 'foo'
[3 Jul 2013 7:55]
Peter Laursen
Reproducible also with older versions. At least 5.1.36. But this works: SELECT * FROM (SELECT 'foo','fee') AS f; /*returns foo fee ------ -------- foo fee */
[3 Jul 2013 8:00]
Peter Laursen
5.0.96 is also affected.
[15 Jul 2013 6:55]
MySQL Verification Team
Hello David,
Thank you for the report.
I noticed that it works only with PostgreSQL but don't work with MySQL 5.5/5.6 GA( also, doesn't seems to work with other DBMS).
IMO - MySQL and others stick to ANSI SQL standard and PostgreSQL does otherwise.
// PostgreSQL
postgres=# select version();
version
------------------------------------------------------------------------------------------------------------
PostgreSQL 9.1.9 on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3, 64-bit
(1 row)
postgres=#
postgres=# select * from (select 'foo', 'foo') AS f;
?column? | ?column?
----------+----------
foo | foo
// MySQL 5.6/5.5/5.1
mysql> select f.* from (select 'foo', 'foo') AS f;
ERROR 1060 (42S21): Duplicate column name 'foo'
// DB2
[IBM][CLI Driver][DB2/NT] SQL0104N An unexpected token ")" was found following "(select 'foo', 'foo'". Expected tokens may include: "<table_expr>". SQLSTATE=42601 (SQL-42601)
// Oracle
[Oracle][ODBC][Ora]ORA-00923: FROM keyword not found where expected (SQL-HY000)
// MS SQL
[Microsoft][ODBC SQL Server Driver][SQL Server]No column was specified for column 1 of 'f'. (SQL-42000) [err was 1 now 1] [state was 42000 now 42000] [Microsoft][ODBC SQL Server Driver][SQL Server]No column was specified for column 2 of 'f'. (SQL-42000) [err was 1 now 1] [state was 42000 now 42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared. (SQL-42000)
Workaround: One workaround I see to avoid "Duplicate column name 'column'".
select * from (select 'foo' as f1, 'foo' as f2) as f;
+-----+-----+
| f1 | f2 |
+-----+-----+
| foo | foo |
+-----+-----+
1 row in set (0.00 sec)
Thanks,
Umesh
