根据with子句中的条件选择要使用的select语句

时间:2019-06-21 13:56:28

标签: sql oracle

我想根据Oracle中的布尔条件选择要使用的选择。我必须在With子句中执行此操作。

我尝试并注意到,我必须从with子句中的select语句开始,否则会出现错误。意思是我不能做类似的事情:

with variable_1 as (  
 select * from tableA

), variable_2 as(
if (true) then
  begin
   select * from tableB 
  end if;
 end;
if (false) then   
 begin
   select * from tableC 
 end if;
end;
)
select  v1.name, v2.surname
from variable_1 v1, variable_2 v2;

我要达到以下条件:

with variable_1 as (  
  select * from tableA

), variable_2 as(

 --If condition is true select from tableB as below
  select * from tableB 

 --If condition is false select from tableC as below  
    select * from tableC

)

select  v1.name, v2.surname
from variable_1 v1, variable_2 v2;

如果条件为true,那么我们应该仅从tableB中选择而不使用tableC 和 如果条件为假,那么我们应该只从tableC中选择而不使用tableB

1 个答案:

答案 0 :(得分:3)

只有在两个表具有相同的列(意味着:列数相同)下,对表select *B使用C时显示为“期望的行为”的情况,具有相同的数据类型,顺序相同-如果两个表中的列名不同,则对列名的任何引用都将跟随表B的名字。

如果这不是真的,则可以更改select以仅选择公共列。例如,在外部选择中,您仅使用surname,因此也许您只需要从任一表中选择该列即可。

话虽如此,您可以这样做

...
variable_2 as (
  select surname from tableB WHERE <YOUR_CONDITION> -- meaning, where it is TRUE
  UNION ALL
  select surname from tableC WHERE <NOT YOUR_CONDITION>

如果需要(也许还有其他用途),也可以使用两个表中的select *,但前提是要满足我的第一段(上面)的条件。