Как объединить столбец данных из одной базы данных Oracle в другую? - PullRequest
0 голосов
/ 21 марта 2019

У меня есть две таблицы, Order и Intend.

Order таблица с данными выборки:

oano code slno 
---------------
1808 ln    1
1808 lk    2
1808 lc    3
1809 ki    1 
1809 dl    2

Intend таблица с данными выборки:

Intendno Oano code slno
------------------------
I/1      1808  ln
I/1      1808  lc
I/2      1809  ki
I/3      1809  dl

Я хочу объединить данные slno из таблицы Order в таблицу Intend, как показано ниже:

Intendno Oano code slno
-----------------------
I/1      1808  ln   1
I/1      1808  lc   3
I/2      1809  ki   1
I/3      1809  dl   2

Как мне лучше всего это сделать?

Ответы [ 3 ]

1 голос
/ 21 марта 2019

Одно возможное решение с использованием merge:

MERGE INTO Intend target
USING (select oano, code, max(slno) slno
           from "Order"
           group by oano, code
      ) source
ON
(target.code = source.code and target.Oano = source.Oano 
WHEN MATCHED THEN UPDATE
    SET target.slno= source.slno;
0 голосов
/ 21 марта 2019

Просто используйте внутреннее соединение

with "Order"(oano, code,slno) as
(
 select 1808,'ln',1 from dual union all
 select 1808,'lk',2 from dual union all
 select 1808,'lc',3 from dual union all
 select 1809,'ki',1 from dual union all 
 select 1809,'dl',2 from dual
), Intend(Intendno, Oano, code) as
(
 select 'I/1',1808,'ln' from dual union all
 select 'I/1',1808,'lc' from dual union all
 select 'I/2',1809,'ki' from dual union all
 select 'I/3',1809,'dl' from dual
)
select i.*, o.slno 
  from Intend i
  join "Order" o
    on o.Oano = i.Oano 
       and o.code = i.code;

 INTENDNO OANO CODE SLNO
 -------- ---- ---- ----
 I/1      1808  ln   1
 I/1      1808  lc   3
 I/2      1809  ki   1
 I/3      1809  dl   2

для получения списка желаемых результатов.

Демо

0 голосов
/ 21 марта 2019

Мы можем попробовать обновить, используя коррелированный подзапрос:

UPDATE Intend i
SET slno = (SELECT o.slno FROM "Order" o WHERE i.Oano = o.oano AND i.code = o.code);

Обратите внимание, что присвоение имени таблице Order, которая является зарезервированным ключевым словом в SQL, является в общем-то плохой идеей, поскольку это означает, что вам придется экранировать это имя таблицы при каждом обращении к ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...