是否有查询选择名称存储在另一个表中的列?

问题描述:

我有两个表 - tblColName和tblData是否有查询选择名称存储在另一个表中的列?

tblColNames具有我想要选择的tblData列的名称列表。

tblColNames 
----------- 
Var1 
Var2 
Var8 
Var9 

我只想从tblData中选择其名称存在于tblColNames中的列。

是否有Teradata SQL查询来执行此操作?

+0

这是一个基本的'JOIN'或'WHERE myColumnWithName IN(SELECT ...)'查询。你尝试过什么吗? – 2014-10-20 09:12:06

+0

@PanagiotisKanavos我读的意思是'select var1,var2,var8,var9 from tblData',其中列表var1-9是动态生成的,它不是'JOIN'或'WHERE' AFAICS。 – Rup 2014-10-20 09:14:57

+0

@Rup是的,这就是我的意思。不是JOIN。 – 2014-10-20 09:22:37

对于此任务,您必须使用动态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语句,然后通过PREPAREOPEN游标命令调用该语句。

因此,您会看到屏幕上打印的指定列和表的条目。