我已经非常努力地在这个主题上进行了搜索,但是没有找到任何相关的内容。
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()
指的是从中运行查询的当前数据库。我想更改它以显示保存行和表的数据库名称(db1
,db2
或db3
)
我不确定这是否可行,所以我希望有人对此有所了解。谢谢!
答案 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()。
这样,您将获得相应的数据库名称。