覆盖MySQL UNION中的隐含数据库?

时间:2013-01-18 15:44:05

标签: mysql select union

我发誓,这只是出于教育目的......

MySQL查询如下所示:

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

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

我可以在我的工会或其中任何一个值中做些什么来使我的查询有效吗?除了在代码中明确声明mytable数据库名称之外?我们假设我无法在'value'之前更改查询中的任何内容。

2 个答案:

答案 0 :(得分: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这里只是一个例子。

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

答案 1 :(得分:0)

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

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