我在谷歌上搜索过这个主题,但没有找到任何相关的。
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
)
我不确定这是否可能,所以我希望有人会有线索。谢谢!
2条答案
按热度按时间2q5ifsrm1#
问题是database()函数返回当前默认数据库的名称。当您将数据库显式地包含在查询中时,这将与查询中使用的数据库不同。
另一种选择是将数据库的名称包含在您的选择中,因此:
请注意,“database”是一个保留字(因为它引用数据库函数,所以请记住,如果您决定将我使用的名称从“db”更改为“db”)。
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()。
因此,您将得到相应的数据库名称。