Oracle 从1个表中插入1行,从另一个表中插入第2行到新表中,依此类推
我有一个表格TABLE101,其中包含以下字段: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
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;