Как объединить две таблицы, чтобы получить последние новые строки из таблицы 2, а остальные из таблицы 1 - PullRequest
1 голос
/ 25 февраля 2020

У меня проблема с объединением двух таблиц в базу данных oracle, и я не могу этого сделать. если вы видите на изображении два варианта.

image

я выполняю этот запрос:

SELECT f.id_hist, f.producto, f.price
FROM TABLE(fnc_historical('JAP')) f
    inner join new_table g on (f.id_new <> g.id_hist)
union
SELECT f.id_hist, f.producto, g.new_price
FROM TABLE(fnc_historical('JAP')) f
    inner join new_table g on (f.id_new = g.id_hist)

для варианта / случая 1 это работает !

, но для варианта / варианта 2 этот запрос возвращает пустой, без строк. и идея состоит в том, что нужно восстановить всю строку исторической информации.

Может ли кто-нибудь мне помочь?

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 25 февраля 2020

Просто используйте NOT IN, чтобы найти записи, не соответствующие new_table g, и соберите записи, полученные с помощью INNER JOIN

SELECT f.id_hist, f.producto, f.price
FROM TABLE(fnc_historical('JAP')) f
WHERE f.id_hist NOT IN
(SELECT DISTINCT f.id_hist
FROM TABLE(fnc_historical('JAP')) f
    inner join new_table g on (f.id_new = g.id_hist)
)
UNION
SELECT f.id_hist, f.producto, g.new_price
FROM TABLE(fnc_historical('JAP')) f
    inner join new_table g on (f.id_new = g.id_hist)
1 голос
/ 25 февраля 2020

Я думаю, что вы ищете left join?

SELECT f.id_hist, f.producto,
       COALESCE(g.price, f.price) as price
FROM TABLE(fnc_historical('JAP')) f LEFT JOIN
     new_table g 
     ON f.id_new = g.id_hist;
...