我试图重写以下代码:
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表
答案 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;