我有一张桌子:
表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
我需要根据以下条件在表中插入新行:
unique_id
= 1且sequ
='testq 1'和{{1}} = 100的col_id
和col_nm
col_val
中找到col_val
= 2,并且col_id
='testc 1',在步骤1}中找到col_nm
= {sequ
,并且unique_id = {{步骤1}的{1}}。 sequ
插入新行,其中col_id = 100,col_nm ='test q100c',unique_id
= {在步骤2中找到的col_val},unique_id
= {sequ在步骤2中找到} 输出为:
col_val
SQL是否有实现此目标的方法?
答案 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步中的值-但我希望这能给您一个开始。同样,这可能不是一种非常有效的方法。对于大量数据的性能,我不提供任何保证。