IMPLICIT和EXPLICIT加入

时间:2015-02-03 10:33:41

标签: sql oracle oracle-sqldeveloper

我试图重写以下代码:

W_WHERE := ' PD.NIF(+) = p.NIF and pd.num_colegiado(+) = p.num_colegiado AND PD.FECHA_INICIO(+) <= SYSDATE 
       AND NVL(PD.FECHA_FIN(+), SYSDATE) >= SYSDATE AND D.ID_DIRECCION(+) = PD.ID_DIRECCION AND p.num_colegiado  = coleg.num_colegiado';

进入正常的JOIN表示法,有人可以帮助我吗?

PS。 PD用于PERSONA_DIRECCION表,P用于PERSONA表

2 个答案:

答案 0 :(得分:2)

这里没有暗示。在Oracle中,&#34;(+)=&#34;是一个正常的JOIN符号&#34; (如你所说)外连接。如果您不想要外部联接,只需删除(+)。

有关说明,请参阅this SO answer

答案 1 :(得分:2)

显式连接的名称来自于明确指定您在表上使用的连接类型(CROSS JOIN,INNER JOIN,LEFT OUTER JOIN等)。

因此,您必须重新编写查询,以便使用显式连接替换FROM子句中的逗号分隔表(此处为INNER JOIN和LEFT JOIN)。然后将您的连接条件移动到相关的ON子句:

select ...
from colleg
inner join p on p.num_colegiado  = coleg.num_colegiado
left join pd on pd.nif = p.nif and 
                pd.num_colegiado = p.num_colegiado and 
                pd.fecha_inicio <= sysdate and
                nvl(pd.fecha_fin, sysdate) >= sysdate
left join d on d.id_direccion = pd.id_direccion;