Я наткнулся на следующий унаследованный PL / SQL и нахожу несколько запутанными внешние объединения против скалярных констант. Прежде всего, кто-то может подтвердить, что моя попытка преобразовать это в ANSI верна.
LEGACY CODE :
cursor c1item (c1item_iel_id number) is
select
`<columns>`
from iel_item iit, iel_item_property iip
where iit.iit_change_type = 'I'
and iip.iip_change_type (+) = 'I'
and iip.it_id (+) = iit.it_id
and iit.iel_id = c1item_iel_id
and iip.iel_id (+) = c1item_iel_id;
ANSI CODE
cursor c1item (c1item_iel_id number) is
select
`<columns>`
from iel_item iit
left outer join iel_item_property iip
on iip.it_id = iit.it_id
and iit.iit_change_type = 'I'
and iip.iip_change_type = 'I'
and iit.iel_id = c1item_iel_id
and iip.iel_id = c1item_iel_id;
Если это правильно, то я не вижу смысла в использовании внешнего соединения. Конечно, если первичный ключ it_id в таблице iit не имеет соответствующего внешнего ключа в таблице iip , то оба iip.iit_change_type и iip.iel_id будет иметь значение NULL, и в этом случае они будут отфильтрованы предложениями AND. Так почему бы просто не использовать внутреннее соединение? Я что-то пропустил? или это оригинальный код чепухи?