Всем доброго!
Есть два подзапроса, отбирают набор по определенным критериям, типа
select
id, dt_beg, dt_end
from ...................
where ..............
нужно отбирать данные из второго если там не нулл записи, если нулл, то из первого, так изначально думал (ошибочно), думая, что первый никогда не будет возвращать нулл записи, поэтому к нему лефтджойнил второй по id
примерно так:
SELECT
ao.id,
DECODE(NVL(an.id,0), 0,ao.dt_beg, an.dt_beg) AS dt_beg,
DECODE(NVL(an.id,0), 0,ao.dt_end, an.dt_end) AS dt_end
FROM
(.....) ao, (.....) an
WHERE ao.id = an.id(+)
AND ao.id = _NUMBER_
;
Но, оказалось, есть ситуации, когда первый возвращает NULL, в это время второй не NULL
и как раз данные со второго приоритетнее, т.е. если они не NULL то именно их и надо подставить.
попробовал сделать FULL OUTER JOIN
но ничего не выбирается, хотя во втором запросе точно есть данные. :-/
SELECT
ao.id,
DECODE(NVL(an.id,0), 0,ao.dt_beg, an.dt_beg) AS dt_beg,
DECODE(NVL(an.id,0), 0,ao.dt_end, an.dt_end) AS dt_end
FROM
(.....) ao
FULL OUTER JOIN (.....) an ON ao.id = an.id
WHERE ao.id = _NUMBER_ OR an.id = _NUMBER_
;
как правильно объединить и отобрать данные?