当前位置: 首页 > 知识库问答 >
问题:

要在同一查询中使用的动态数据库名称,而不使用存储的过程

劳英华
2023-03-14

有没有可能在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有没有可能做到这一点,而不使用循环?

共有1个答案

澹台阳秋
2023-03-14

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

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

这不需要存储过程,但需要两个单独的SELECT语句。一个选择检索数据库标识符。并且从中得到的值可用于为提交到数据库的另一个SELECT生成包含SQL文本的字符串。

 类似资料:
  • 问题内容: 您将如何在不同的环境中处理跨数据库查询。例如,db1-development和db2-development,db1-production和db2-production。 如果要在从db2到db1的开发中进行跨数据库查询,则可以使用完全限定的名称,即[db1-development]。[schema]。[table]。但是,如何在不同环境之间维护查询和存储过程?[db1-develop

  • 如何使用@ Query(value = " SELECT * FROM do _ not _ track WHERE(user _ id = 7)AND(' 2022-06-25 ' BETWEEN FROM _ date AND to _ date)OR(' 2022-06-30 ' BETWEEN FROM _ date AND to _ date)",nativeQuery = true)在

  • 问题内容: 我已经编写了一个存储过程函数来从表中获取名称。麻烦的是,我希望将表名作为参数传递(我需要使用几个不同的表来使用此函数): 此方法有一个错误,因为它使用变量名“ tableName”而不是变量的实际值。 我可以解决此问题的 方法 通过使用这样的: …但是,当我尝试在函数中执行此操作时,我收到一条消息,提示: 存储函数或触发器中不允许使用动态SQL 我尝试使用 过程 代替,但是我不能像函数

  • 问题内容: 例如,mysql引用表名使用 注意` 其他数据库是否曾经使用过不同的char来引用其表名 问题答案: 引号的这种使用称为定界标识符。这是SQL的重要组成部分,因为否则您将不能使用以下标识符(例如表名和列名): 包含空格:“我的桌子” 包括特殊字符和标点符号:“我的表格” 包括国际字符:“私のテーブル” 区分大小写:“ MyTable” 匹配SQL关键字:“表” 标准SQL语言对定界标识

  • 问题内容: 我在存储过程中创建一个动态查询。我的存储过程如下: 当我尝试通过以下调用运行它时: 我收到以下错误消息: 错误代码:1054。“ where子句”中的未知列“ SPA” 我在没有where条件的情况下进行了测试,并且工作正常,但是在where条件不起作用的情况下,我尝试使用@和变量名一起使用,但仍然无法正常工作。 谢谢你的帮助。 问题答案: 您错过了条款中的引号。 尝试这样: 说明 :

  • 问题内容: 我需要获取SQL Server中的所有表名。为此,我使用以下代码: 我需要使用动态数据库名称。为此,我尝试使用以下代码: 但这是行不通的。我怎样才能做到这一点 ? 问题答案: 或简单地: