Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
Sql 更新表:在oracle中将结果从一行复制到另一行_Sql_Oracle_Sql Update - Fatal编程技术网

Sql 更新表:在oracle中将结果从一行复制到另一行

Sql 更新表:在oracle中将结果从一行复制到另一行,sql,oracle,sql-update,Sql,Oracle,Sql Update,在更新表中的数据时,我面临以下问题 首先是数据库的结构 我有两张桌子 表1: 投票:列:PKID、结果、用法、组 对于每次使用,一组人必须投票,结果保存在此表中。 表2: 用法:列:PKID、状态、源 每个用法都有一个状态,某些用法有一个源用法,但可以为null。 现在我需要迁移我的数据。我想将某些投票结果复制到投票表中的其他投票 我被困在这里 用例如下所示: 每次使用状态为4的投票,我称之为活动,b组应获得b组的投票结果,b组的投票结果绑定到源为状态4的使用的使用,即活动使用 以下是我要插入的

在更新表中的数据时,我面临以下问题

首先是数据库的结构

我有两张桌子

表1: 投票:列:PKID、结果、用法、组

对于每次使用,一组人必须投票,结果保存在此表中。 表2: 用法:列:PKID、状态、源

每个用法都有一个状态,某些用法有一个源用法,但可以为null。 现在我需要迁移我的数据。我想将某些投票结果复制到投票表中的其他投票

我被困在这里

用例如下所示: 每次使用状态为4的投票,我称之为活动,b组应获得b组的投票结果,b组的投票结果绑定到源为状态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)
但现在我无法将这些结果链接到正确的行。。。 这里有一个例子:


如果我理解正确,您需要与此类似的合并:

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');

更新后,V04键的值3被替换为23键V01。

示例数据和所需结果将真正有助于向其他人传达您想要做的事情。我添加了一张图片作为示例。也许这有助于解释我想要的结果你对一切都理解正确。我唯一需要编辑的是u2.source=u1.pkid和u2.status=4上的源连接用法u2。要在u1.source=u2.pkid和u2.status=4上连接用法u2,我以前不知道merge命令。但这正是我需要的。@JensB。如果这解决了你的问题,那么你应该接受答案。