我正在查询查询中的这一块SQL:
AND CONT_POINT.CONTACT_POINT_TYPE(+) = 'EMAIL'
AND CONT_POINT.PRIMARY_FLAG(+) = 'Y'
AND ra.cust_trx_type_id = rt.cust_trx_type_id
PRIMARY_FLAG(+) = 'Y'
部分是什么?谢谢!
编辑:嗯,我想我找到了一个领先者 - Oracle "(+)" Operator
答案 0 :(得分:1)
是的,它是旧的(ANSI SQL之前的)外连接运算符。
但是,在这种特殊用法中,值得再提一点。
如果您有查询,例如:
select a.name parent_name,
b.name child_name
from parent a,
child b
where a.id = b.id(+);
然后你将显示所有父母的名字,即使那些没有孩子的名字也是如此。 (这就是(+)运算符所做的。如果父级中的行没有任何子级,则仍会显示这些行,并为child_name指定NULL值。)
现在,如果您想向父母展示,即使是那些没有孩子的父母,但只有女孩子呢?
如果您执行以下操作:
select a.name parent_name,
b.name child_name
from parent a,
child b
where a.id = b.id(+)
and b.gender='F';
会有效地使外连接无效。由于任何外连接行对于CHILD中不存在数据的所有行都将为NULL,因此“b.gender ='F'”将通过过滤掉外连接的行来有效地抵消外连接。
所以,如果相反,你会做类似的事情:
select a.name parent_name,
b.name child_name
from parent a,
child b
where a.id = b.id(+)
and b.gender(+)='F';
这会给你带来理想的效果。它只显示从PARENT到CHILD连接的行的女性,对于没有孩子的行,它们不被过滤掉。
所以,即使你没有显示完整的查询,我的猜测是你外部加入了具有PRIMARY_FLAG列的表,并且这个谓词说,显示PRIMARY_KEY为'Y的所有行由于外部联接到不存在的行,'或 PRIMARY_KEY为NULL。
希望这很清楚。