在运行时确定SQL From子句?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在运行时确定SQL From子句?相关的知识,希望对你有一定的参考价值。

我有一个table1,其中包含一个列,其中存储了其他表的名称。根据table1中的值,查询应该提取与其中给出的表名对应的数据。

例如,让存储tablename的表为tablelist(tablename,tableid)

让名称存储在表list.table名称中的其他表为A,B,C

基于给定的输入参数tableid,如果tablename中存储的值为“A”,则查询应提取相当于以下内容的结果:

Select A.name from A;

如果是'B',查询应该是:

Select B.type from B;

如果是'C',查询应该是:

Select C.msg from C;

如何将其作为单个查询接受表id作为输入?

请指教

答案

你可以尝试case when结构:

select case tableid 
       when 'A' then (select name from a) 
       when 'B' then (select type from b)
       when 'C' then (select msg  from c) 
       end
  from tbl

一些数据示例:

with 
  tablelist(tablename, tableid) as (
      select 'A', 1 from dual union all
      select 'B', 2 from dual union all
      select 'B', 7 from dual union all
      select 'C', 3 from dual ), 
  a(name) as (select 'Chris' from dual),
  b(type) as (select 'T800'  from dual),
  c(msg)  as (select 'Hello' from dual)
select case tablename
       when 'A' then (select name from a) 
       when 'B' then (select type from b)
       when 'C' then (select msg  from c) 
       end as value
  from tablelist
  where tableid = 7

结果T800

以上是关于在运行时确定SQL From子句?的主要内容,如果未能解决你的问题,请参考以下文章

带有 ASP Classic 的 SQL(FROM 子句中的语法错误。)

如何从 UDF 参数提供 SELECT 语句的 FROM 子句

SQL Server 查询错误 -ORDER BY 子句在视图中无效

SQL Server查询错误-ORDER BY子句在视图中无效

如何使用 case 语句来确定存储过程中的 from 和 where 子句?

SQL Server 上表包含点时生成错误的 FROM 子句导致 Sqoop 无效对象名称错误