SQL для отображения старых и новых значений - PullRequest
0 голосов
/ 26 ноября 2018

Рассмотрим таблицы ниже

Create table t1 (n1 number identity, v1 varchar);
Create table t2 (n1 number identity, v1 varchar);

N1 в обеих таблицах являются столбцами идентификаторов

Значения таблицы t1 такие, как показано ниже


|   N1   |    V1   |
|--------|---------|
|    1   |    A    |
|    2   |    B    |
|    3   |    C    |
-------------------

Теперь, когда я вставляюТабличные значения T1 в T2, мне нужно собрать отображение между T1.N1 и T2.N1

Отображение старого значения N1 и нового значения N1.

Скажите, если в значениях T2 идентичностисоздаются, как показано ниже, мне нужно знать, каково новое значение T2.N1, соответствующее старому значению T1.N1.


|   N1   |    V1   |
|--------|---------|
|    6   |    A    |
|    7   |    B    |
|    8   |    C    |
-------------------


Old N1 = 1, New N1 = 6
Old N1 = 2, New N1 = 7
Old N1 = 3, New N1 = 8

Каков наилучший способ добиться этого в Oracle и сервере MS SQL?Программно или по запросу?Не внося никаких изменений в таблицу.

Я попробовал описанный ниже метод, но это невозможно

Oracle

Create type mapping_object is object (n1 number, n2 number);
Create type mapping_tab is table of mapping_object;

Insert into T2 (v1) 
select v1 from T1 
returning T2.n1, T1.n1 bulk collect into mapping_tab;

SQL-сервер

Declare @mapping_tab is table (n1 int, n2 int)

Insert into T2 (v1) 
Output inserted.n1, T1.n1 into @mapping_tab
Select v1 from T1 

1 Ответ

0 голосов
/ 26 ноября 2018

Я бы добавил новое поле в t2, чтобы сохранить связь между таблицами, а также позволил бы установить ограничение внешнего ключа.

Create table t2 (n1 number identity, v1 varchar, t1_n1 number);  

и сделать

Insert into T2 (v1, t1_n1) 
Select v1, n1 from T1 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...