记录一个Oracle(+)使用的技巧
oracle(+) 表示外连接简写 table a,table b where a.a=b.a(+)等价于table a left join table b on a.a=a.b
重点
select a.*,b.* from table a,table b where a.id=b.id(+) and a.field1=1 and b.field2=2
以上sql等价于下面的sql
select * from (select a.*,b.* from table a,table b where a.id=b.id(+)) where field1=1 and field2=2
这个操作会过滤掉table2连接到的field为空的值,导致最终记录数小于table a field=1的记录数
正确写法
select a.*,b.* from table a,table b where a.id=b.id(+) and a.field1=1 and (b.field2=2 or b.field2 is null)
(b.field2=2 or b is null)这个()是重点,在(+)连接中是禁止使用or关键词的。