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" (как вы сказали) для внешнего соединения. Если вы не хотите внешнего соединения, просто удалите (+).

Смотрите этот так ответ для объяснения.

Другие вопросы по тегам