IMPLICIT и EXPLICIT присоединяются
Я пытаюсь переписать следующий код:
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 ответа
Решение
Явные объединения получают свое имя от явного указания, какое соединение вы используете для таблицы (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;
Здесь нет ничего скрытого. В Oracle "(+) =" - это "нормальная нотация JOIN" (как вы сказали) для внешнего соединения. Если вы не хотите внешнего соединения, просто удалите (+).
Смотрите этот так ответ для объяснения.