根据条件插入新行-Oracle SQL

时间:2019-05-30 16:04:54

标签: sql oracle

我有一张桌子:

表1

unique_id       col_id      col_nm      col_val     sequ 
1               1           testq 1     100         1   
1               2           testc 1     abc         1   
1               1           testq 1     101         2   
1               2           testc 1     xyz         2
1               5           test 5      10          1       
1               8           test 6      100         1   


2               1           testq 1     100         1   
2               2           testc 1     pqr         1   
2               1           testq 1     101         2   
2               2           testc 1     xxy         2
2               5           test 5      qqw         1       
2               8           test 6      100         1   

我需要根据以下条件在表中插入新行:

  1. 找到unique_id = 1且sequ ='testq 1'和{​​{1}} = 100的col_idcol_nm
  2. col_val中找到col_val = 2,并且col_id ='testc 1',在步骤1}中找到col_nm = {sequ,并且unique_id = {{步骤1}的{1}}。
  3. 为相应的sequ插入新行,其中col_id = 100,col_nm ='test q100c',unique_id = {在步骤2中找到的col_val},unique_id = {sequ在步骤2中找到}

输出为:

col_val

SQL是否有实现此目标的方法?

1 个答案:

答案 0 :(得分:2)

我们可以在INSERT…SELECT构造中使用WITH子句。像这样吗?

insert into table1
with s1 as (
  select t.unique_id 
         , t.sequ 
  from table1 t
  where t.col_id = 1 
  and t.col_nm = 'testq 1' 
  and t.col_val = 100 )
  , s2 as (
     select s1.*
            , t.col_val
      from s1
           join table1 t 
              on t.sequ = s1.sequ
              and t.unique_id = s1.unique_id
  where t.col_id = 2
  and t.col_nm = 'testc 1' 
)
select s2.unique_id
       ,100 as col_id 
       ,'test q100c' as col_nm
       ,s2.col_val
       ,s2.sequ 
from s2
/

我不确定我是否完全理解您的规则-我使用了第2步中的col_val(这是您预期的输出显示的内容),而不是您的第3条规则中的第1步中的值-但我希望这能给您一个开始。同样,这可能不是一种非常有效的方法。对于大量数据的性能,我不提供任何保证。