select p.fdept_id, decode(p.fis_allow_edit, 'Y', '0', null) ftalbe_desc, t.*
from hthis.p_cp_table t, hthis.PSTDEPTCP pwhere t.ftable_id = p.ftable_id(+)
and p.fdept_id(+) = '9999';
这是我在一个不是我的项目上偶然看到的sql语句。
第一个(+)是左连接,但是第二个(+)引起了我的兴趣。
经过尝试,我发现这个语句等同于:
select p.fdept_id, decode(p.fis_allow_edit, 'Y', '0', null) ftalbe_desc, t.*
from hthis.p_cp_table t, (select * from hthis.PSTDEPTCP where fdept_id = '9999') p
where t.ftable_id = p.ftable_id(+);
也就是说第二个(+)的作用是过滤 p表的记录再进行关联。如果不加,那么就在t表和p表关联后的数据集再过滤。