Sql 选择从查询中检索列名的列
我正在寻找一种优雅的方法来从表a中选择一列,其中的列名是从表B的查询中检索出来的 对表B的查询会导致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
'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)脚本,这使得存储例程成为唯一的选项。如果根本没有脚本,那么您当然是正确的。