Sql 选择从查询中检索列名的列

Sql 选择从查询中检索列名的列,sql,mysql,oracle,Sql,Mysql,Oracle,我正在寻找一种优雅的方法来从表a中选择一列,其中的列名是从表B的查询中检索出来的 对表B的查询会导致'col01' 表A有几个列,分别命名为“col01”、“col02”、“col03”… 最后的查询应该是查询结果 result from B | effective SQL query 'col01' | SELECT col01 FROM A 'col02' | SELECT col02 FROM A B|有效SQL查询的结果 “col01”|从列表中选择col01

我正在寻找一种优雅的方法来从表a中选择一列,其中的列名是从表B的查询中检索出来的

对表B的查询会导致
'col01'
表A有几个列,分别命名为“col01”、“col02”、“col03”…

最后的查询应该是查询结果

result from B | effective SQL query 'col01' | SELECT col01 FROM A 'col02' | SELECT col02 FROM A B|有效SQL查询的结果 “col01”|从列表中选择col01 “col02”|从列表中选择col02 我正在寻找没有脚本的纯SQL解决方案。它应该与Oracle和/或MySQL一起运行

我正在寻找没有脚本的纯SQL解决方案

这是不可能的。您必须动态创建语句。

在一个非常简单的情况下,您可以使用
case
语句来创建语句,但这在现实世界中不太有用:

with a as (
    select 'col_01_val_01' as col_01, 'col_02_val_01' as col_02,
        'col_03_val_01' as col_03 from dual
    union select 'col_01_val_02' as col_01, 'col_02_val_02' as col_02,
        'col_03_val_02' as col_03 from dual
    union select 'col_01_val_03' as col_01, 'col_02_val_03' as col_02,
        'col_03_val_03' as col_03 from dual),
b as (
    select 1 parm, 'col_01' value from dual
    union select 2 parm, 'col_02' value from dual
    union select 3 parm, 'col_03' value from dual)
select b.value as result_from_b,
    case b.value
        when 'col_01' then col_01
        when 'col_02' then col_02
        when 'col_03' then col_03 end as result_from_a
from a, b
where b.parm = 1;

RESULT_FROM_B RESULT_FROM_A
------------- -------------
col_01        col_01_val_01
col_01        col_01_val_02
col_01        col_01_val_03

列必须是相同的类型(或者至少在本例中可以这样表示),并且
b
只能返回一行。。。当然也不是很漂亮。对于任何更复杂的问题,您都需要动态SQL,正如@a_horse_和_no_name所建议的那样。

这可以在MySQL中存储的例程中完成。我不了解Oracle,因为我没有使用过它。您可以了解更多关于MySQL存储过程和(第二个链接是一个非常好的PDF,它将引导您了解一些简单的示例)。

我认为这是不可能的;-)这项要求是一个没有脚本的解决方案,这样就排除了存储过程。@a_horse_与_no_name-非常正确。然而,我认为这意味着没有外部(DB)脚本,这使得存储例程成为唯一的选项。如果根本没有脚本,那么您当然是正确的。