| Bug #73590 | MySQL returns "ERROR 1046 (3D000): No database selected" when executing "Update | ||
|---|---|---|---|
| Submitted: | 14 Aug 2014 17:56 | Modified: | 15 Aug 2014 15:49 |
| Reporter: | Flavian C | Email Updates: | |
| Status: | Verified | Impact on me: | |
| Category: | MySQL Server: Parser | Severity: | S3 (Non-critical) |
| Version: | 5.5.26 5.6.19 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
[14 Aug 2014 17:56]
Flavian C
[14 Aug 2014 18:00]
Sveta Smirnova
Thank you for the report. Please specify which exact minor version of MySQL server you use and provide output of SHOW CREATE TABLE for all involved tables.
[14 Aug 2014 18:28]
Flavian C
Just for test case you can do: Do not do " use dbname " login into mysql : execute the following CREATE TABLE flavian.`test1` ( `col1` int(3) DEFAULT NULL, `col2` int(3) DEFAULT NULL, `col3` int(3) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; CREATE TABLE flavian.`test2` ( `col1` int(3) DEFAULT NULL, `col2` int(3) DEFAULT NULL, `col3` int(3) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; mysql> update flavian.test1 a JOIN (select * from flavian.test2 b, (select * from flavian.test2 c where c.col1=1 limit 1) d where b.col1=d.col1) ea JOIN (select sum(e.col2) from flavian.test2 e where e.col1=1) ef set a.col2=ea.col2, a.col3=ef.col3 where a.col1=1 and a.col2=2; ERROR 1046 (3D000): No database selected mysql> update flavian.test1 a JOIN (select * from flavian.test2 b where b.col1=(select c.col1 from flavian.test2 c where c.col1=1 limit 1)) ea JOIN (select sum(e.col2) size1 from flavian.test2 e where e.col1=1) ef set a.col2=ea.col2, a.col3=ef.size1 where a.col1=1 and a.col2=2; Query OK, 0 rows affected
[14 Aug 2014 18:35]
Sveta Smirnova
Thank you for the report.
Verified as described. If run first query with default database correct error is returned:
mysql> update flavian.test1 a JOIN (select * from flavian.test2 b,
-> (select * from flavian.test2 c where c.col1=1 limit 1) d where
-> b.col1=d.col1) ea JOIN (select sum(e.col2) from flavian.test2 e where
-> e.col1=1) ef set a.col2=ea.col2, a.col3=ef.col3 where a.col1=1 and
-> a.col2=2;
ERROR 1060 (42S21): Duplicate column name 'col1'
[14 Aug 2014 18:44]
Flavian C
Sorry try this: But dont use default db name. mysql -uroot mysql> update flavian.test1 a JOIN (select b.col2 from flavian.test2 b, (select c.col1 from flavian.test2 c where c.col1=1 limit 1) d where b.col1=d.col1) ea JOIN (select sum(e.col2) size1 from flavian.test2 e where e.col1=1) ef set a.col2=ea.col2, a.col3=ef.size1 where a.col1=1 and a.col2=2; ERROR 1046 (3D000): No database selected mysql> update flavian.test1 a JOIN (select b.col2 from flavian.test2 b where b.col1=(select c.col1 from flavian.test2 c where c.col1=1 limit 1)) ea JOIN (select sum(e.col2) size1 from flavian.test2 e where e.col1=1) ef set a.col2=ea.col2, a.col3=ef.size1 where a.col1=1 and a.col2=2; Query OK, 0 rows affected, 1 warning (0.15 sec) Rows matched: 0 Changed: 0 Warnings: 0 if you do " use flavian " the query executes mysql -uroot mysql> use flavian; mysql> update flavian.test1 a JOIN (select b.col2 from flavian.test2 b, (select c.col1 from flavian.test2 c where c.col1=1 limit 1) d where b.col1=d.col1) ea JOIN (select sum(e.col2) size1 from flavian.test2 e where e.col1=1) ef set a.col2=ea.col2, a.col3=ef.size1 where a.col1=1 and a.col2=2; Query OK, 0 rows affected mysql> update flavian.test1 a JOIN (select b.col2 from flavian.test2 b where b.col1=(select c.col1 from flavian.test2 c where c.col1=1 limit 1)) ea JOIN (select sum(e.col2) size1 from flavian.test2 e where e.col1=1) ef set a.col2=ea.col2, a.col3=ef.size1 where a.col1=1 and a.col2=2; Query OK, 0 rows affected
[14 Aug 2014 18:54]
Flavian C
As you can see the 1st query is using join inside a join even though dbname was mentioned in all table still got " ERROR 1046 (3D000): No database selected " 2nd query is converted to a subquery, this executes without any error. If you specify " use dbname " both the query executes properly.
[14 Aug 2014 19:04]
Sveta Smirnova
mysql> update flavian.test1 a JOIN (select * from flavian.test2 b, (select * from flavian.test2 c where c.col1=1 limit 1) d where b.col1=d.col1) ea JOIN (select sum(e.col2) from flavian.test2 e where e.col1=1) ef set a.col2=ea.col2, a.col3=ef.col3 where a.col1=1 and a.col2=2; ERROR 1046 (3D000): No database selected mysql> use flavian; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> update flavian.test1 a JOIN (select * from flavian.test2 b, (select * from flavian.test2 c where c.col1=1 limit 1) d where b.col1=d.col1) ea JOIN (select sum(e.col2) from flavian.test2 e where e.col1=1) ef set a.col2=ea.col2, a.col3=ef.col3 where a.col1=1 and a.col2=2; ERROR 1060 (42S21): Duplicate column name 'col1'
[14 Aug 2014 19:11]
Flavian C
Sveta Smirnova Please try the test case provided below. mysql -uroot mysql> update flavian.test1 a JOIN (select b.col2 from flavian.test2 b, (select c.col1 from flavian.test2 c where c.col1=1 limit 1) d where b.col1=d.col1) ea JOIN (select sum(e.col2) size1 from flavian.test2 e where e.col1=1) ef set a.col2=ea.col2, a.col3=ef.size1 where a.col1=1 and a.col2=2; ERROR 1046 (3D000): No database selected mysql> update flavian.test1 a JOIN (select b.col2 from flavian.test2 b where b.col1=(select c.col1 from flavian.test2 c where c.col1=1 limit 1)) ea JOIN (select sum(e.col2) size1 from flavian.test2 e where e.col1=1) ef set a.col2=ea.col2, a.col3=ef.size1 where a.col1=1 and a.col2=2; Query OK, 0 rows affected, 1 warning (0.15 sec) Rows matched: 0 Changed: 0 Warnings: 0 if you do " use flavian " the query executes mysql -uroot mysql> use flavian; mysql> update flavian.test1 a JOIN (select b.col2 from flavian.test2 b, (select c.col1 from flavian.test2 c where c.col1=1 limit 1) d where b.col1=d.col1) ea JOIN (select sum(e.col2) size1 from flavian.test2 e where e.col1=1) ef set a.col2=ea.col2, a.col3=ef.size1 where a.col1=1 and a.col2=2; Query OK, 0 rows affected mysql> update flavian.test1 a JOIN (select b.col2 from flavian.test2 b where b.col1=(select c.col1 from flavian.test2 c where c.col1=1 limit 1)) ea JOIN (select sum(e.col2) size1 from flavian.test2 e where e.col1=1) ef set a.col2=ea.col2, a.col3=ef.size1 where a.col1=1 and a.col2=2; Query OK, 0 rows affected As you can see the 1st query is using join inside a join even though dbname was mentioned in all table still got " ERROR 1046 (3D000): No database selected " 2nd query is converted to a subquery, this executes without any error. If you specify " use dbname " both the query executes properly.
[15 Aug 2014 15:49]
Flavian C
Sveta Smirnova. Any update on it?
[7 Apr 2016 13:54]
damien goor
Same issue in this update query:
SET @odo = 0;
SET @ship = '';
UPDATE trans_dm.deliveries,
(
SELECT StopNum,
IF(@ship = SHIPMENTNUM, IF(@odo = 0, 0, IF(Odometer = Distance, 0, Odometer - @odo)), 0) AS DistDG,
@odo:= Odometer AS Odometer,
@ship:=SHIPMENTNUM AS SHIPMENTNUM,
Distance
FROM (
SELECT SHIPMENTNUM,
STOP_NUM AS StopNum,
STOP_ODO_READING AS Odometer,
SUM(STOP_DISTANCE) AS Distance
FROM trans_dm.deliveries
WHERE FLAG = 'Actual' AND
STOP_ODO_READING>0
GROUP BY SHIPMENTNUM, STOP_NUM, STOP_ODO_READING
ORDER BY 1, 2
) AS _tmp0
) AS _tmp1
SET CalcDist = _tmp1.DistDG
WHERE deliveries.SHIPMENTNUM = _tmp1.SHIPMENTNUM AND deliveries.STOP_NUM = _tmp1.StopNum AND deliveries.FLAG = 'Actual';
I believe it comes from the "FROM (" subquery. If I issue the "SELECT DBNAME" statement it works fine.
