2013-01-18 9 views
0

我发誓,这是仅用于教育目的......覆盖MySQL UNION中的隐含数据库?

MySQL查询看起来是这样的:

SELECT * 
FROM mytable 
where name='value' AND addr='value' 
UNION SELECT * 
     FROM mysql.user; 

但我得到的错误是没有mysql.mytable table

有什么我可以在我的工会或任何这些值做我的查询有效吗?除了在代码中明确声明mytable数据库名称吗?假设我无法在“值”之前更改查询中的任何内容。

+0

您查询是错误的...您想要做什么? ...在'information_schema'中没有像'mytable'和'user'这样的表格 –

回答

1

你不是很清楚你想从information_schema.user中选择什么。 information_schema是标准的MySQL数据库,它默认存在。但是这个数据库中没有user表。

要查看数据库的列表,这样做在你的MySQL控制台:

show databases; 

要查看数据库中的表:

use information_schema 
show tables; 

从你都这么说,它看起来像你数据库默认使用information_schema。此外,您正尝试在此数据库中选择mytable,该表似乎也不存在。你可以运行上面的命令并向我们显示输出吗?

更新:如果你需要从两个不同的数据库中进行选择:

select * from mydatabase.mytable union select * from mysql.users 

要么删除mydatabase如果mytable是在当前数据库中或提供数据库的正确名称来代替。 mydatabase这里只是一个例子。

但是,正如您已经指出的那样,您应该在两个表中都有相同的列,或者指定从每个表中选择相同的列。

+0

谢谢maksimov。对不起,我应该写了mysql.user表而不是information_schema。存在同样的问题。我得到一个没有mysql.mytable的错误,这是正确的。 mytable存在于服务器上的其他数据库中。 – OldNoob

+0

我已经更新了我的答案。 – maksimov

+0

谢谢maksimov,是的,我知道显式声明mytable来自数据库将使联合工作,但如果不存在,是不可能使查询有效吗?如果没有,那么这看起来像是“意外安全”。 – OldNoob

0

对于功能和有效的UNION子句,两个查询中必须具有相同的列。在选择中缺少列,使用别名突出显示默认NULL:

Select *, NULL as "column1" FROM table1 ... 
+0

谢谢throrin19,列数不是问题,它是MySQL假定mytable与用户在同一个数据库中,而不是。所以那是错误。 – OldNoob