我可以使用ON语句中的CASE子句加入ORACLE(10g)中的表(或者甚至是where子句,因为它是内连接)

1 sql oracle syntax join case

我正在尝试使以下代码更小.这可能吗?

select a.*
from table1 a
WHERE a."cola1" = 'valuea1'
UNION ALL
select a.*
from tablea1 a
inner join tablea2 b on a."cola2" = b."colb2"
WHERE a."cola1" = 'valuea2'
  and b."colb3" = 'valueb3'
Run Code Online (Sandbox Code Playgroud)

实际上我正在寻找table1中value1或value2的记录,但对于匹配value2的记录,我想应用1个额外的条件,它涉及到第二个表的连接这可以在没有UNION子句的情况下完成吗?

一个骨架或我正在尝试编码的是下面......但它不能自然地工作.

select a.*
from table1 a
inner join table2 b on a."cola1" = b."COLb1"
WHERE a."cola2" IN ('valuea1','valuea2')
  and 
  CASE 
    WHEN a."cola2" = 'valuea2' THEN b."colb1" = 'valueb3'
    ELSE 1=1
  END CASE
Run Code Online (Sandbox Code Playgroud)

Hos*_*Aly 5

我认为CASE声明在连接条件下工作,但我不确定.但这对你有用吗?

select *
  from table1 a
 where a.cola1 = 'valuea1'
    or (a.cola1 = 'valuea2'
        and Exists(select 1
                     from table2 b
                    where a.cola2 = b.colb2
                      and b.colb3 = 'valueb3'
                   )
        )
Run Code Online (Sandbox Code Playgroud)

编辑:这不会简单地工作吗?

select a.*
  from table1 a
  Left Outer Join table2 b On (a.cola2 = b.colb2)
 where a.cola1 = 'valuea1'
    or (a.cola1 = 'valuea2' and b.colb3 = 'valueb3')
Run Code Online (Sandbox Code Playgroud)