Обычно лучше использовать синтаксис ANSI-соединений, но, следуя вашим указаниям, я буду использовать синтаксис Oracle (с оператором "плюс" для внешних объединений).
Во-первых, обратите внимание, что у вас есть "«плюс» не с той стороны в первом условии в предложении WHERE
;вам нужно, чтобы «фиктивные» строки были добавлены к table_B
, а не к table_A
.
Затем, как правило, лучше сначала выполнить агрегацию, если она зависит только от одной таблицы.Это то, что я делаю в подзапросе в предложении FROM
ниже.
Кроме того, date
- это ключевое слово Oracle, и его не следует использовать в качестве имени столбца.Я надеюсь, что вы не используете это таким образом.Для моего кода я предположил, что имя столбца dt
.
select a.link, a.name, b.action, b.dt
from table_a a,
( select link, 'OK' action, max(dt) dt
from table_b
where action = 'OK'
group by link
) b
where b.link (+) = a.link
;