我在更新表格中的数据时遇到以下问题。
首先是数据库的结构。
我有2张桌子。
表1: 投票:专栏:PKID,RESULT,USAGE,GROUP
表2: 用法:列:PKID,STATUS,SOURCE
现在我需要迁移我的数据。我想将某些投票的某些结果复制到投票表中的其他一些投票中。
这里我被卡住了......
用例如下: 状态4中使用的每个投票(我称之为活动)和组b应该得到组b的投票结果,该投票结果与源4是状态4中的使用(活动使用)的用法绑定。
这些是我想要插入的结果:
select v2.result from votings v2
join usage us on us.pkid = v2.usage
where us.status=10 and us.source in (
select v3.usage from votings v3
join usage us2 on us2.pkid = v3.usage
where us2.status = 4 and v3.group = v2.group)
但是现在我无法将这些结果链接到正确的行...
这是一个例子:
答案 0 :(得分:1)
如果我理解了一切你需要merge
类似于此:
merge into votings v
using (select u2.pkid usid, vt.grp, vt.result
from votings vt
join usage u1 on vt.usage = u1.pkid and u1.status = 10
join usage u2 on u2.source = u1.pkid and u2.status = 4
) s
on (v.usage = s.usid and v.grp = s.grp)
when matched then update set result = s.result
测试数据:
create table votings(PKID varchar2(3), RESULT int, USAGE varchar2(3), GRP varchar2(2));
insert into votings values ('V01', 23, 'U01', 'B');
insert into votings values ('V02', 17, 'U02', 'B');
insert into votings values ('V03', 9, 'U04', 'C');
insert into votings values ('V04', 3, 'U04', 'B');
create table usage (PKID varchar2(3), STATUS int, SOURCE varchar2(3));
insert into usage values ('U01', 10, null);
insert into usage values ('U02', 10, null);
insert into usage values ('U04', 4, 'U01');
关键3
的更新值V04
已替换为23
(关键V01
)。