如何将select with if条件用于oracle中的不同表,而不是编写函数或存储过程?
我的要求是使用if语句从复杂查询中获取报告 如果如何将select with if条件用于oracle中的不同表,而不是编写函数或存储过程?,oracle,Oracle,我的要求是使用if语句从复杂查询中获取报告 如果标志=0我必须执行一组select语句,如果标志=1我必须从另一个表执行另一组select语句 有什么方法可以在查询中实现这一点,而不是编写函数或存储过程 例如: 在SQL中,我这样做 if flag = 0 select var1, vari2 from table1 else select var1, vari2, var3, vari4 from table2 这可能吗???如果SQL中没有,那么就没有—
标志=0
我必须执行一组select语句,如果标志=1
我必须从另一个表执行另一组select语句
有什么方法可以在查询中实现这一点,而不是编写函数或存储过程
例如:
在SQL中,我这样做
if flag = 0
select var1, vari2 from table1
else
select var1, vari2, var3, vari4 from table2
这可能吗???如果SQL中没有
,那么就没有——有case
表达式,但它不是完全相同的东西
如果有两个表,t1
和t2
,并且flag
位于标量表t3
(“标量”表示正好有一列,flag
,正好有一行,值为0
或1
),您可以随心所欲,但前提是t1
和t2
具有相同的列数和相同的数据类型(而且,尽管语法不要求这样做,但这只有在t1
和t2
中的列具有相同的业务含义时才有意义)。或者,至少,如果您计划仅从t1
或t2
中选择一些列,则您要从任一表中选择的列的数量应相等,具有相同的数据类型,最好具有相同的业务含义
例如:t1
和t2
可能是员工表,可能是针对刚刚合并的两家公司。如果它们都包括名、姓、出生日期
,并且您只想根据标志
值从t1
或t2
中选择这三列(即使t1
有其他列,但在t2
中不存在),您可以这样做。如果t1
或t2
或两者都不是单个表,而是更复杂查询的结果,则相同。原理是一样的
您可以使用联合所有
,如下所示:
select t1.col1, t1.col2, ...
from t1 cross join t3
where t3.flag = 0
UNION ALL
select t2.col1, t2.col2, ...
from t2 cross join t3
where t3.flag = 1
;
如果要生成返回可变列数的普通SQL,则不能。谢谢,但是,union只适用于相同的列数,在我的情况下,第一个查询中有两列,第二个查询中有四列。@EdgarConrado-那么在SQL中就不能这样做。您可能会在PL/SQL或Java或C#或其他语言中执行此操作。