从选择查询中查找数据库名称

时间:2018-08-23 08:45:27

标签: mysql database-metadata

我已经非常努力地在这个主题上进行了搜索,但是没有找到任何相关的内容。

MySQL问题:是否可以在选择查询中显示包含表行的数据库?

例如,我有3个具有相同结构的数据库。我运行这样的东西:

select database(), id, name, created_on from (
select * from db1.user
union all
select * from db2.user
union all 
select * from db3.user) as q where id = "123";

在这种情况下,database()指的是从中运行查询的当前数据库。我想更改它以显示保存行和表的数据库名称(db1db2db3

我不确定这是否可行,所以我希望有人对此有所了解。谢谢!

2 个答案:

答案 0 :(得分:1)

问题是DATABASE()函数返回当前默认数据库的名称。当您明确将数据库包含在查询中时,该查询将与查询中使用的数据库不同。

另一种选择是在您选择的数据库中包含数据库名称,这样:

select db, id, name, created_on from (
select "db1" as db, user.* from db1.user
union all
select "db2" as db, user.* from db2.user
union all 
select "db3" as db, user.* from db3.user) as q where id = "123";

请注意,“数据库”是保留字(因为它指的是数据库功能,因此请记住,如果您决定从“ db”更改我使用的名称。

答案 1 :(得分:0)

您可以按照以下棘手的步骤来获得所需的结果。

1)首先,在所有三个数据库的用户表中创建db_name列。
2)然后,在插入查询中将db_name的值添加为database(),因此在插入时,它将存储各自的数据库名称(即,当从db1执行插入查询时,db_name的值将是db1,类似地, db2和db3的值分别为db2和db3。
3)然后在您的查询中,用db_name替换database()。

这样,您将获得相应的数据库名称。