2017-02-17 3 views
-1

У меня есть таблица TABLE101 со следующими полями:Вставка 1 строка с 1 таблицы и второй формой строки другой таблицы в новую таблицу и так далее

COL1 COLB COLC COLD 
ACT1 UYT 876  KJH 
ACT2 CFG 976  TRY 

У меня есть другая таблица TABLE102 как под:

COL1  COL2 COL3  COL4  COL5  COL6  
ACt1  A1_B1 98  UI     2 
ACT2  C1    00   N 
ACT2  D1_D4  1  PP   Y  RT  
ACT2  A1_F1 9T  UI     2   

Теперь я хочу, чтобы вставить данные в 3-таблицу, которая имеет все поля из table101 и таблиц 102, как:

COL1 COLB COLC COLD COL2 COL3 COL4  COL5  COL6  LVL 
ACT1 UYT 876 KJH             1 
ACt1      A1_B1 98  UI     2   2 
ACT2 CFG 976 TRY             1 
ACT2      C1    00  N 
ACT2      D1_D4  1  PP  Y   RT   2 
ACT2      A1_F1 9T  UI     2   2 

Итак, мне нужно вставить первую строку из таблицы101 и для соответствующего значения COL1 мне нужно вставить строку из TABLE102. В таблице101 COL1 уникален, но в таблице 101 col1 может быть несколько строк. Если я вставляю строку из таблицы101, мне нужно установить lvl col на 1, и если я вставляю форму table102, я устанавливаю lvl col на 2

Как я могу это сделать?

+0

Почему в 3-й таблице не существует вторая строка из TABLE102 таблицы? –

+0

@oto - Почему 3-й стол? все 3 структуры таблицы различны. Третья таблица представляет собой комбинацию таблицы 1 и таблицы 2 – Mishti

+0

в таблице TABLE102, у вас есть строка, где 'COL2 = 'C1''. где эта строка в вашей комбинированной таблице? –

ответ

0

Вы можете использовать UNION ALL для объединения ваших таблиц. Затем используйте синтаксис INSERT ... SELECT для вставки в 3-ю таблицу.

SELECT COL1 , COLB, COLC , COLD,    NULL AS COL2, NULL AS COL3, NULL AS COL4, NULL AS COL5, NULL AS COL6,  1 AS LVL FROM TABLE101 
UNION ALL 
SELECT COL1, NULL AS COLB, NULL AS COLC, NULL AS COLD, COL2, COL3, COL4 , COL5 , COL6 , 2 AS LVL FROM TABLE102 
0

Установка:

create table table101 as 
    select 'ACT1' col1, 'UYT' colb, 876 colc, 'KJH' cold from dual union all 
    select 'ACT2'  , 'CFG'  , 976  , 'TRY'  from dual 
; 
commit; 
select * from table101; 

COL1 COLB COLC COLD 
---- ---- ---- ---- 
ACT1 UYT 876 KJH 
ACT2 CFG 976 TRY 

2 rows selected. 

create table table102 as 
    select 'ACT1' col1, 'A1_B1' col2, '98' col3, 'UI' col4, null col5, '2' col6 from dual union all 
    select 'ACT2'  , 'C1'  , null  , '00'  , 'N'  , null  from dual union all 
    select 'ACT2'  , 'D1_D4'  , '1'  , 'PP'  , 'Y'  , 'RT'  from dual union all 
    select 'ACT2'  , 'A1_F1'  , '9T'  , 'UI'  , null  , '2'  from dual 
; 
commit; 
select * from table102; 

COL1 COL2 COL3 COL4 COL5 COL6 
---- ----- ---- ---- ---- ---- 
ACT1 A1_B1 98 UI  2 
ACT2 C1   00 N 
ACT2 D1_D4 1 PP Y RT 
ACT2 A1_F1 9T UI  2 

4 rows selected. 

create table table110 (col1 varchar2(4000), colb varchar2(4000), colc number, cold varchar2(4000), 
    col2 varchar2(4000), col3 varchar2(4000), col4 varchar2(4000), col5 varchar2(4000), 
    col6 varchar2(4000), lvl number); 

Table TABLE110 created. 

заявление Вставка и результат:

insert into table110 
select col1, colb, colc, cold, null, null, null, null, null, 1 
    from table101 
union all 
select col1, null, null, null, col2, col3, col4, col5, col6, 2 
    from table102 
; 
commit; 
select * from table110; 

COL1 COLB COLC COLD COL2 COL3 COL4 COL5 COL6 LVL 
---- ---- ---- ---- ----- ---- ---- ---- ---- --- 
ACT1 UYT 876 KJH        1 
ACT2 CFG 976 TRY        1 
ACT1    A1_B1 98 UI  2  2 
ACT2    C1   00 N   2 
ACT2    D1_D4 1 PP Y RT  2 
ACT2    A1_F1 9T UI  2  2 

6 rows selected. 

select * from table110; 
Смежные вопросы