| Bug #65360 | Update does not work with double-nested queries without default database | ||
|---|---|---|---|
| Submitted: | 18 May 2012 14:12 | Modified: | 18 May 2012 14:46 | 
| Reporter: | Alex Bolenok | Email Updates: | |
| Status: | Verified | Impact on me: | |
| Category: | MySQL Server: Parser | Severity: | S3 (Non-critical) | 
| Version: | 5.1.61, 5.5.23 | OS: | Any | 
| Assigned to: | CPU Architecture: | Any | |
| Tags: | UPDATE | ||
   [18 May 2012 14:46]
   Valeriy Kravchuk        
  Thank you for the bug report. Verified with 5.1.61 also:
macbook-pro:5.1 openxs$ bin/mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.1.61-debug Source distribution
Copyright (c) 2000, 2011, 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 DATABASE IF NOT EXISTS a;
Query OK, 1 row affected (0.00 sec)
mysql> 
mysql> CREATE TABLE IF NOT EXISTS a.target (id INT NOT NULL PRIMARY KEY, value INT NOT NULL);
Query OK, 0 rows affected (0.13 sec)
mysql> 
mysql> DELETE
    -> FROM    a.target;
Query OK, 0 rows affected (0.00 sec)
mysql> 
mysql> INSERT
    -> INTO    a.target
    -> VALUES  (1, 1);
Query OK, 1 row affected (0.00 sec)
mysql> 
mysql> -- Update 1
mysql> 
mysql> UPDATE  a.target t
    -> JOIN    (
    ->         SELECT  1 AS id, 1 AS value
    ->         ) q
    -> USING   (id)
    -> SET     t.value = t.value + q.value;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> 
mysql> -- Update 2
mysql> 
mysql> UPDATE  a.target t
    -> JOIN    (
    ->         SELECT  *
    ->         FROM    (
    ->                 SELECT  1 AS id, 1 AS value
    ->                 ) q
    ->         ) q
    -> USING   (id)
    -> SET     t.value = t.value + q.value;
ERROR 1046 (3D000): No database selected
...
So, this is not a recent regression.
 
   [18 May 2012 14:48]
   MySQL Verification Team        
  see also http://bugs.mysql.com/bug.php?id=61376
   [15 Aug 2014 15:53]
   Flavian C        
  Any solution for this BUG? This topic is of 2012 and we are in 2014. This bug is still there in 5.5, 5.6.21 latests version also

Description: If double-nested queries are using in a multiple-table update, and not database is selected, the statement does not parse with ERROR 1046 (3D000): No database selected How to repeat: -- Run this with no default database selected CREATE DATABASE IF NOT EXISTS a; CREATE TABLE IF NOT EXISTS a.target (id INT NOT NULL PRIMARY KEY, value INT NOT NULL); DELETE FROM a.target; INSERT INTO a.target VALUES (1, 1); -- Update 1 UPDATE a.target t JOIN ( SELECT 1 AS id, 1 AS value ) q USING (id) SET t.value = t.value + q.value; -- Update 2 UPDATE a.target t JOIN ( SELECT * FROM ( SELECT 1 AS id, 1 AS value ) q ) q USING (id) SET t.value = t.value + q.value; USE a; -- Update 1 UPDATE a.target t JOIN ( SELECT 1 AS id, 1 AS value ) q USING (id) SET t.value = t.value + q.value; -- Update 2 UPDATE a.target t JOIN ( SELECT * FROM ( SELECT 1 AS id, 1 AS value ) q ) q USING (id) SET t.value = t.value + q.value;