我想根据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
答案 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 *
,但前提是要满足我的第一段(上面)的条件。