我知道(+)函数的用途以及如何使用'where a(+)=b'
这样的表达式。我不明白使用(+)函数来使用' IS NULL'表达
其中table.valid_end_date(+)IS NULL
答案 0 :(得分:2)
(+)是“Operator”,表示“前一列是连接中的外连接列。”
它不是一个函数,它不带参数,不(本身)返回任何值,你不能在select子句中使用它进行计算。它只是Oracle特定语法的一项,表示外连接。
因此,在形成外连接时,您必须将此(+)运算符应用于该连接的所有部分(否则它不再是外连接)
,所以where table.valid_end_date(+) IS NULL
只是意味着table
已被外连接(并且要求字段valid_end_date为空)
答案 1 :(得分:1)
(+)
是一种旧的,特定于Oracle的编写left join
的方法。因此,当您编写col1(+) is null
时,您正在向left join
添加条件。该条件表示仅匹配col1
为null
的行。
以下是一个示例查询:
select *
from customers c
, orders o
where o.customer_id(+) = c.id
and o.dt(+) is null
正如您在SQL Fiddle所看到的,每个客户都会返回:
null
日期null
日期的任何订单,则会生成包含所有null
列的单个行等效的新语法查询是:
select *
from customers c
left join
orders o
on o.customer_id = c.id
and o.dt is null
我个人认为后面的语法更加清晰。