我正在尝试使以下代码更小.这可能吗?
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)
我认为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)