是否有查询选择名称存储在另一个表中的列?
问题描述:
我有两个表 - tblColName和tblData是否有查询选择名称存储在另一个表中的列?
tblColNames具有我想要选择的tblData列的名称列表。
tblColNames
-----------
Var1
Var2
Var8
Var9
我只想从tblData中选择其名称存在于tblColNames中的列。
是否有Teradata SQL查询来执行此操作?
答
对于此任务,您必须使用动态SQL。所需要的命令是在过程中被调用,基本如下所示(这是一个DB2
例子,我曾经写过,但原则应该是任何方言类似):
CREATE OR REPLACE PROCEDURE DYNAMIC_TABLE_ACCESS
(IN TableName VARCHAR(40), IN ColName VARCHAR(40))
DYNAMIC RESULT SETS 1
READS SQL DATA
LANGUAGE SQL
SPECIFIC DYNAMIC_TABLE_ACCESS
BEGIN
DECLARE V_DYNAMIC VARCHAR(200);
DECLARE V_SQL VARCHAR(200);
DECLARE V_CUR CURSOR WITH RETURN TO CALLER FOR V_DYNAMIC;
SET V_SQL='SELECT ' CONCAT ColName CONCAT ' AS ColName FROM ' CONCAT TableName;
PREPARE V_DYNAMIC FROM V_SQL;
OPEN V_CUR;
END
的想法是创建一个字符串V_SQL
包含带有动态选择的列名和表名的SQL语句,然后通过PREPARE
和OPEN
游标命令调用该语句。
因此,您会看到屏幕上打印的指定列和表的条目。
这是一个基本的'JOIN'或'WHERE myColumnWithName IN(SELECT ...)'查询。你尝试过什么吗? – 2014-10-20 09:12:06
@PanagiotisKanavos我读的意思是'select var1,var2,var8,var9 from tblData',其中列表var1-9是动态生成的,它不是'JOIN'或'WHERE' AFAICS。 – Rup 2014-10-20 09:14:57
@Rup是的,这就是我的意思。不是JOIN。 – 2014-10-20 09:22:37