Oracle的左连接类似于a.id=b.id(+)的条件在where子句中,实现a表全部数据与b表中id与a表中id相等数据的合集,这时a表中那些在b表中无对应id的数据所取得的b表所独有字段数据为空,但是如果这时在where子句中再加上一个b表的限制条件,比如减少搜索范围,如where a.id=b.id(+) and b.created_time>=sysdate-365,则在b表中无对应id的a表数据将消失,就和a.id=b.id一样。
所以要使用左连接,同时又想增加对等号右边表的限定,有两种方法,一是再加上的右表限定条件也要加上(+),如where a.id=b.id(+) and b.created_time(+)>=sysdate-365,二是直接从from子句中就把b表先限制过滤了,如... from a,(select * from b where b.created_time>=sysdate-365) bb where a.id=bb.id(+)。
似乎第一种方法并没有达到减少b表搜索量的目的,而对左连接等号左边的表(如上面说的a表)字段的限制条件则没有这些要求,其他的外连接情况类似。
>> 除非说明均为原创,如转载请注明来源于http://www.stormcn.cn/post/1619.html