Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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 使用另一个表中的值更新表中某列的所有记录_Sql_Oracle_Oracle11g_Oracle Sqldeveloper - Fatal编程技术网

Sql 使用另一个表中的值更新表中某列的所有记录

Sql 使用另一个表中的值更新表中某列的所有记录,sql,oracle,oracle11g,oracle-sqldeveloper,Sql,Oracle,Oracle11g,Oracle Sqldeveloper,您好,我想用表\u NAME\u 4MINS表的RequestId更新IIL\u CHANGE\u请求表的RequestId列的所有值,其中两个表中的REQUESTBY列相同。我正试图在oracle daatabalsesql developer中实现这一点 我的问题是: Update IIL_CHANGE_REQUEST set REQUESTID=(SELECT TABLE_NAME_4MINS.REQUESTID FROM TABLE_NAME_

您好,我想用表\u NAME\u 4MINS表的RequestId更新IIL\u CHANGE\u请求表的RequestId列的所有值,其中两个表中的REQUESTBY列相同。我正试图在oracle daatabalsesql developer中实现这一点

我的问题是:

Update IIL_CHANGE_REQUEST 
set REQUESTID=(SELECT TABLE_NAME_4MINS.REQUESTID
                     FROM TABLE_NAME_4MINS
                     WHERE IIL_CHANGE_REQUEST.REQUESTBY = TABLE_NAME_4MINS.REQUESTBY) 
WHERE EXISTS (SELECT TABLE_NAME_4MINS.REQUESTID
                     FROM TABLE_NAME_4MINS
                     WHERE IIL_CHANGE_REQUEST.REQUESTBY = TABLE_NAME_4MINS.REQUESTBY)
但每次我这样做,我都会得到一个错误,说:

Error starting at line : 1 in command -
Update IIL_CHANGE_REQUEST 
set REQUESTID=(SELECT TABLE_NAME_4MINS.REQUESTID
                     FROM TABLE_NAME_4MINS
                     WHERE IIL_CHANGE_REQUEST.REQUESTBY = TABLE_NAME_4MINS.REQUESTBY) 
WHERE EXISTS (SELECT TABLE_NAME_4MINS.REQUESTID
                     FROM TABLE_NAME_4MINS
                     WHERE IIL_CHANGE_REQUEST.REQUESTBY = TABLE_NAME_4MINS.REQUESTBY)
错误报告-

ORA-01427:单行子查询返回多行


请任何人帮助我怎么做。

这取决于你在这种情况下想做什么。如果您真的不在乎,请取任何值,例如最小值:

update iil_change_request a
set a.requestid = (select min(b.requestid)            --> here
                   from table_name_4mins b
                   where a.requestby = b.requestby) 
where exists (select c.requestid
              from table_name_4mins c
              where a.requestby = c.requestby);

如果这不是你想要的,那么你必须弄清楚如何处理这些复制品。也许您必须包含另一个WHERE条件,或修复数据,或。。。谁知道呢?我不知道,但你应该知道。

这取决于你在这种情况下想做什么。如果您真的不在乎,请取任何值,例如最小值:

update iil_change_request a
set a.requestid = (select min(b.requestid)            --> here
                   from table_name_4mins b
                   where a.requestby = b.requestby) 
where exists (select c.requestid
              from table_name_4mins c
              where a.requestby = c.requestby);

如果这不是你想要的,那么你必须弄清楚如何处理这些复制品。也许您必须包含另一个WHERE条件,或修复数据,或。。。谁知道呢?我不需要,但您应该这样做。

您需要找到一个条件,将返回的行缩小到仅按请求的stby,例如,您可以替换。。。在下面的查询中使用列名,以便根据order by仅返回第一行:

合并到IIL\u变更请求中 使用 挑选* 从…起 选择REQUESTBY,REQUESTID ,行号按请求按订单按。。。注册护士 从表_NAME_4min 其中rn=1 T ON r.REQUESTBY=t.REQUESTBY 匹配后再更新 设置REQUESTID=t.REQUESTID;
您需要找到一个条件,将返回的行缩小为仅按RequestStBy返回的行,例如,您可以替换。。。在下面的查询中使用列名,以便根据order by仅返回第一行:

合并到IIL\u变更请求中 使用 挑选* 从…起 选择REQUESTBY,REQUESTID ,行号按请求按订单按。。。注册护士 从表_NAME_4min 其中rn=1 T ON r.REQUESTBY=t.REQUESTBY 匹配后再更新 设置REQUESTID=t.REQUESTID;
单行子查询返回多行-这句话中有什么不清楚?单行子查询返回多行-这句话中有什么不清楚?非常感谢,我没有意识到可能有多个案例的REQUESTBY相同,这就是我出错的原因。非常感谢,我没有意识到可能有多个案例这就是为什么我会出错的原因。非常感谢你,我没有意识到可能有多个案例的REQUESTBY是相同的,这就是为什么我会出错。现在我知道该怎么做了。非常感谢你们,我并没有意识到可能有多个情况下REQUESTBY是相同的,这就是为什么我会出错。现在我知道该怎么办了。