2012-11-06 38 views
0

看到了很多关于基于价值观,但没有分析数据类似的帖子完全是我想从一个包含列名称一个表得到的结果列另一张桌子。例如:SQL - 从表选择列,其中另一个表列的值等于列名列表

Select [col1], [col2] 
from Table1 
where (select changes as (col#) 
     from table2) 

col#是我希望从Table1获得的列名的列表。 Table2的变化列是一个逗号分隔的列表。我想找一种方法可以从Table2的列表中获取Table1中的每列。任何帮助是极大的赞赏。

+0

任何解决方案都是数据库特定的。您使用的是什么RDMS? – Alex

+0

您需要提供您正在使用的数据库供应商。你需要将'changes'中的值分成几行。 – codingbiz

回答

0

您必须即时创建查询。您可以通过这样做:

  1. 首先从changes列中的数据提取到您的调用应用程序,然后从该数据组装一个SQL查询字符串并执行它,或
  2. 创建内存储的动态声明程序和EXEC(或任何您的RDBMS的等效声明)。

请务必注意,如果changes中的数据来自用户输入,那么您将处于一个受到伤害的世界。

如果你对模式有控制权,我建议避免这种存储数据的方式。一般来说,逗号分隔列表只是笨拙的,从根本上违背了数据库设计的目的。对于每个列可以更改(id, col1_changed, col2_changed)或每个更改列(id, changed_col_name)的单个布尔值的更改表结构在正常查询中使用会更容易。

相关问题