2014-06-24 43 views
0

是否有可能做这样的事情在MySQL的:动态数据库名称,而不使用存储过程

选择*,CONCAT(“” SCHEMA_NAME,“MY_TABLE”)为DATABASE_NAME from table_a a inner join table_b b on b.id = a.id inner join database_name c on a.id2 = c.id;

基本上,database_name的值取自现有查询,也将用于相同的查询中。

是否有可能做这样的事情,而不使用存储的过程? 如果没有,是否可以在不使用循环的情况下在Java中执行此操作?

回答

0

在单个查询中无法做到这一点。不过,它不需要存储过程。

标识符在查询中不能变;当需要提交SQL文本时,MySQL需要知道知道对象的名称(表,列,函数等);标识符在执行时不能改变。

这不需要存储过程,但它确实需要两个单独的SELECT语句。一个SELECT来检索数据库标识符。并且可以使用这些值来制定一个包含SQL文本的字符串,以便将另一个SELECT提交给数据库。

+0

我现在正在做的一个解决方法(或可能是我能想到的唯一解决方案)是在java中,我循环所有结果,然后在循环内部,有另一个select语句。我认为从长远来看这会造成性能问题,尤其是在包含大量记录的情况下,并且此查询将用于管理员用户的搜索屏幕,因此会有大量记录。 – jaypax123

+0

@ user15167776:如果要查询数十个或数百个表,则要么需要运行数十个或数百个查询,要么将各个表的查询合并为一些巨大的$$ UNION ALL查询。但是,当你有大量的表来查询时,情况就是这样。 – spencer7593