使用子选择选择 FROM 表并修改生成的表名

Posted

技术标签:

【中文标题】使用子选择选择 FROM 表并修改生成的表名【英文标题】:SELECT the FROM table with a sub select and modify the resulting table name 【发布时间】:2017-02-14 12:56:05 【问题描述】:

我有以下 两个 无法更改的表格。

1:数据类型

+----------------------+-----------------------+
| datatypename(String) | datatypetable(String) |
+----------------------+-----------------------+

示例数据:

+-----------+------------+
| CycleTime |  datalong  |
+-----------+------------+
| InjTime1  | datadouble |
+-----------+------------+

2:datalong_1(数据模型在这里无关紧要)

我现在想进行一个查询,从 datatypes 表中读取 datatypetable 属性,将String "_1" 添加到其中并从中选择所有内容。

从编程的角度来看,我想象它看起来类似于这个显然还行不通的语句:

SELECT * FROM 
    (SELECT datatypetable FROM datatypes WHERE datatypename = 'CycleTime') + '_1'

如何使用 HSQLDB 在 SQL 中实现这一点?

感谢 Leonidas199x,我现在知道如何进入 '_1',但我如何告诉 FROM句子选择不是我要从中读取的新表,而是我想要读取的现有表的名称想读。

SELECT * FROM 
    (SELECT RTRIM(datatypetable)+'_1' FROM datatypes WHERE datatypename = 'CycleTime')

根据这个与我相同的问题,这是不可能的:

using subquery instead of the tablename

:(

【问题讨论】:

Edit您的问题和基于您的样本数据的预期输出。 Formatted text 请no screen shots 另外:SQL 中的字符串连接运算符是 || 而不是 + - HSQLDB 允许使用非标准的 +,但最好坚持使用标准。 【参考方案1】:

您能更详细地解释一下您的数据模型吗?我不确定我是否完全理解你想要做什么。 如果您想将 _1 添加到“数据类型名称”,您可以使用:

SELECT datatypename+'_1' 
FROM   datatypes

【讨论】:

基本上只有一张表,它保存着哪个table-Prefix存储特定数据类型的信息(即表Nr1)。然后可能有数百个表以前缀开头并以“_”和标识符结尾,所以“_1”。我给出了一个名为“datalong_1”的表的示例。总共存在 4 个前缀,每个数据类型(long、int、double、String)一个。现在,如果我想知道哪个表存储了标识符 1 的 CycleTime 信息,我必须从数据类型表中提取前缀并向其添加后缀“_1”

以上是关于使用子选择选择 FROM 表并修改生成的表名的主要内容,如果未能解决你的问题,请参考以下文章

使用动态生成的表名选择

SQL 查询 SELECT FROM [从表名中选择值]

sql优化

Oracle 性能优化

基于无效的表选择生成

oracle查询优化