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

jtw3ybtb  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(372)

我在谷歌上搜索过这个主题,但没有找到任何相关的。
mysql问题:是否可以在select查询中显示保存表行的数据库?
例如,我有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() 指从中运行查询的当前数据库。我想将它改为显示保存行和表的数据库名称( db1 , db2 或者 db3 )
我不确定这是否可能,所以我希望有人会有线索。谢谢!

2q5ifsrm

2q5ifsrm1#

问题是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";

请注意,“database”是一个保留字(因为它引用数据库函数,所以请记住,如果您决定将我使用的名称从“db”更改为“db”)。

lb3vh1jj

lb3vh1jj2#

您可以通过以下棘手的步骤来实现所需的结果。
1) 首先,在所有三个数据库的user表中创建db\u name列。
2) 然后,在insert into查询中,将db\u name的值添加为database(),因此在插入时,它将存储相应的数据库名称(即,当从db1执行insert查询时,db\u name的值将为db1,类似地,db2和db3的db\u name列将分别具有值db2和db3)。
3) 然后在查询中用db\u name替换database()。
因此,您将得到相应的数据库名称。

相关问题