使用表中字段的值作为select语句

时间:2016-03-14 18:00:58

标签: sql oracle oracle11g oracle10g

我试图弄清楚如何将表中的值用作select语句,例如

table1包含: column-cl1 价值 - 麻木

表2: 专栏 - 麻木 值1,2,3,4

我想选择cl1(值:numb)然后用它来运行语句

select numb from table2

到目前为止,我已经使用了

select (select cl1 from table1) from table2;

这会返回麻木4次,但我想要实际值

我期望的输出是 1,2,3,4。

我希望查询从表1中选择,它将返回字段名称,然后使用该字段名称(numb)作为select语句的一部分,因此期望结束sql看起来像:

select numb from table2; 

然而 numb 将是table1中的任何内容;

2 个答案:

答案 0 :(得分:1)

您可以这样做,但是您需要扩展您的表以包含您选择的可能列的列表,每个源行每列一行。如果这是一个很大的可能性列表或大型数据集......好吧,它不会很漂亮。

例如:

With thedata as (
    select 1 row_id, 11 col1, 12 col2, 13 col3 from dual union all
    select 2 row_id, 21 col1, 22 col2, 23 col3 from dual union all
    select 3 row_id, 31 col1, 32 col2, 33 col3 from dual union all
    select 4 row_id, 41 col1, 42 col2, 43 col3 from dual )
, col_list as (
   select 1 col_id, 'col1' col from dual union all    
   select 2 col_id, 'col2' col from dual union all
   select 3 col_id, 'col3' col from dual )
select row_id, coldata
FROM  ( 
        -- here's where I have to mulitply the source data, generating one row for each possible column, and hard-coding that column to join to
        SELECT  row_id, 'col1' as col, col1 as coldata from thedata
        union all
        SELECT  row_id, 'col2' as col, col2 as coldata from thedata
        union all
        SELECT  row_id, 'col3' as col, col3 as coldata from thedata
      ) expanded_Data
JOIN col_list
  on col_list.col = expanded_data.col
where col_id = :your_id;

将id设置为2并获取:

ROW_ID  COLDATA
1       12
2       22
3       32
4       42

所以是的,它可以完成,但不是真正动态的,因为您需要事先完全了解并硬编码您从表中提取的可能列名值。如果您需要一个可以选择任何列或任何表的真正动态选择,那么您需要动态构建查询并立即执行。

编辑 - 添加此警告: 我还应该补充一点,这只有在抓取所有可能的列具有相同数据类型的情况下才有效,或者您需要将它们全部转换为通用数据类型。

答案 1 :(得分:0)

您可以使用变量来存储numb的值,然后在SELECT语句中重用它,如下所示:

DECLARE @numb int
SET @numb = (SELECT cl1 from table2)

SELECT * from stat1 s WHERE s.numb = @numb