我试图弄清楚如何将表中的值用作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中的任何内容;
答案 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