以下mysql
查询
select * from PrivateData.Table1 AS m
LEFT JOIN
PrivateData.Table2 AS i
ON m.GUID = i.OutId;
在此查询中正常工作:
delete m,i from PrivateData.Table1 AS m
LEFT JOIN
PrivateData.Table2 AS i
ON m.GUID = i.OutId;
给出错误:
错误1046(3D000):未选择数据库
为什么会这样?如何从表中删除选定的行呢?
P.S。:我不是mysql
查询的专家。
答案 0 :(得分:1)
我不确定这是否与这个问题有关,但值得一试。来自documentation:
用于删除行的表列表中的别名引用 在多表删除中,除非有一个,否则使用默认数据库 明确指定。例如,如果默认数据库是db1,则 以下语句不起作用,因为不合格的别名 引用a2被解释为具有db1:
的数据库
DELETE a1, a2 FROM db1.t1 AS a1 INNER JOIN db2.t2 AS a2
WHERE a1.id=a2.id;
正确匹配引用表外的表的别名 默认数据库,您必须使用明确限定引用 正确数据库的名称:
DELETE a1, db2.a2 FROM db1.t1 AS a1
INNER JOIN db2.t2 AS a2
WHERE a1.id=a2.id;
尝试明确指定数据库:
delete PrivateData.m, PrivateData.i from PrivateData.Table1 AS m
LEFT JOIN
PrivateData.Table2 AS i
ON m.GUID = i.OutId;
答案 1 :(得分:0)
稍作改动
delete from m,i using PrivateData.Table1 AS m LEFT JOIN PrivateData.Table2 AS i ON m.GUID = i.OutId;
答案 2 :(得分:0)
MySQL ERROR 1046(3D000):未选择数据库:
简单的:
您需要告诉MySQL使用哪个数据库:
USE database_name;
在创建表格之前。
如果数据库不存在,您需要将其创建为:
CREATE DATABASE database_name;
后跟:
USE database_name;
另一个:简短示例
当我试图查看给定数据库中的表时,我遇到了上述错误。当您连接到MySQL服务器时,除非您明确指定,否则它不会为您选择数据库。
如果您只使用,
mysql --userusername --passwordpassword
or
mysql -uusername -ppassword
然后MySQL客户端只连接到数据库服务器。在此之后,您必须指定要使用的数据库名称:
use database_name
如果您不喜欢上述方法,您可以做的只是在启动时直接指定数据库。
相同的语法是:
mysql -uusername -ppassword database_name
For ex., mysql –ugaurav –pchhabra testdb