由于外连接而在where子句中的if语句

时间:2018-04-20 01:37:32

标签: sql oracle plsql

我想从表中选择一个值,其中where子句在2个条件下。

select a.value1
b.value2
c.value3
from a,b,c
where
a.header_id = b.header_id
and b.line_id = c.line_id(+)

如果c.line_id不为null,我有更多where子句,如

c.active = 'Y'
c.active_date > sysdate

任何想法,如何使这个陈述发挥作用?

1 个答案:

答案 0 :(得分:4)

使这个语句有效的最好方法是使用ANSI连接重写它:

SELECT
    a.value1
,   b.value2
,   c.value3
FROM a
JOIN b ON a.header_id = b.header_id
LEFT OUTER JOIN c ON b.line_id = c.line_id

现在毫无疑问,附加条件的位置 - 因为它仅适用于c非空的行,您将其添加到ON子句:

SELECT
    a.value1
,   b.value2
,   c.value3
FROM a
JOIN b ON a.header_id = b.header_id
LEFT OUTER JOIN c ON b.line_id = c.line_id
                 AND c.active = 'Y'
                 AND c.active_date > sysdate