从 select 查询中查找数据库名称

Find database name from select query

我用谷歌搜索了这个主题,但没有找到任何相关内容。

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

例如,我有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() 指的是查询 运行 来自的当前数据库。我想更改它以显示保存该行的数据库名称,而不是 table(db1db2db3

我不确定这是否可行,所以我希望有人能提供线索。谢谢!

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

1)首先,在所有三个数据库的用户table中创建db_name列。
2) 然后,在你的插入查询中添加 db_name 的值作为数据库 (),因此在插入时,它将存储相应的数据库名称(即当从 db1 执行插入查询时,[=18 的值=] 将是 db1,类似地 db_name db2 和 db3 的列将分别具有值 db2 和 db3。
3) 然后在您的查询中只需将 database() 替换为 db_name.

因此,您将获得相应的数据库名称。

问题是 DATABASE() 函数 returns 当前默认数据库的名称。当您明确将数据库作为查询的一部分时,这将与查询中使用的数据库不同。

另一种方法是在 select 中包含数据库名称,因此:

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";

请注意 "database" 是一个保留字(因为它指的是数据库功能,所以请记住,如果您决定更改我使用的名称 "db"。