Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 从1个表中插入1行,从另一个表中插入第2行到新表中,依此类推_Oracle_Plsql_Sql Insert - Fatal编程技术网

Oracle 从1个表中插入1行,从另一个表中插入第2行到新表中,依此类推

Oracle 从1个表中插入1行,从另一个表中插入第2行到新表中,依此类推,oracle,plsql,sql-insert,Oracle,Plsql,Sql Insert,我有一个表格TABLE101,其中包含以下字段: COL1 COLB COLC COLD ACT1 UYT 876 KJH ACT2 CFG 976 TRY 我还有另一张表,表102如下: COL1 COL2 COL3 COL4 COL5 COL6 ACt1 A1_B1 98 UI 2 ACT2 C1

我有一个表格TABLE101,其中包含以下字段:

COL1    COLB   COLC   COLD
ACT1    UYT    876     KJH
ACT2    CFG    976     TRY
我还有另一张表,表102如下:

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        
现在我想将数据插入第三个表中,该表包含表101和表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值,我需要插入表102中的行。 在表101中,COL1是唯一的,但在表101中,COL1可以有多行。 若我插入表格101中的行,我必须将lvl col设置为1,若我插入表格102,我将lvl col设置为2


我如何才能这样做?

您可以使用
UNION ALL
组合表。然后使用
INSERT。。。选择插入第三个表的语法

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
设置:

插入声明和结果:

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;

为什么第三个表格中没有表102表格的第二行?@oto-为什么第三个表格?所有3个表结构都不同。第三个表是表1和表2的组合在表102表中,您有一行,其中
COL2='C1'
。这一行在您的组合表中的什么位置?编辑为有那一行,但没有找到。ACt1(小写t)是打字错误吗?
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;