Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Oracle 使用另一个表的值更新表_Oracle_Loops_Join_Sql Update_Insert Update - Fatal编程技术网

Oracle 使用另一个表的值更新表

Oracle 使用另一个表的值更新表,oracle,loops,join,sql-update,insert-update,Oracle,Loops,Join,Sql Update,Insert Update,我试图通过子查询更新表,但出现以下错误: ORA-01427:单行子查询返回多行 142700000-“单行子查询返回多行” 我想在列中插入第三个表的内容 我的问题是: UPDATE GH212_TABLE1 SET GH212_LINK = (SELECT GH201_TABLE1.GH201_ATTRIBUTEX FROM GH210_TABLE3 LEFT JOIN GH201_TABLE1

我试图通过子查询更新表,但出现以下错误:

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

我想在列中插入第三个表的内容

我的问题是:

UPDATE GH212_TABLE1
SET GH212_LINK = (SELECT GH201_TABLE1.GH201_ATTRIBUTEX
                  FROM GH210_TABLE3
                  LEFT JOIN GH201_TABLE1
                  ON GH210_TABLE3.GH210_GH201_ID = GH201_TABLE1.GH201_ID
                  INNER JOIN GH212_TABLE1
                  ON GH212_TABLE1.GH212_GH210_ID = GH210_ID
                  WHERE GH212_TABLE1.GH212_GH210_ID=GH210_TABLE3.GH210_ID  
                  GROUP BY GH201_ATTRIBUTEX)

WHERE GH212_TABLE1.GH212_ATTRIBUTEY='11';
我不确定如何正确链接表,以便从一个特定对象获取属性

任何帮助都将不胜感激

干杯, 法比


编辑:谢谢你的回复!我很清楚多行的问题,但不知何故我无法解决它。甚至当我尝试这个独特的查询时。但是威廉·罗伯逊的解决方案似乎奏效了,非常感谢

SELECT GH201_TABLE1.GH201_ATTRIBUTEX
                  FROM GH210_TABLE3
                  LEFT JOIN GH201_TABLE1
                  ON GH210_TABLE3.GH210_GH201_ID = GH201_TABLE1.GH201_ID
                  INNER JOIN GH212_TABLE1
                  ON GH212_TABLE1.GH212_GH210_ID = GH210_ID
                  WHERE GH212_TABLE1.GH212_GH210_ID=GH210_TABLE3.GH210_ID  
                  GROUP BY GH201_ATTRIBUTEX
此查询可能会为您提供多个行值,因此您将获得此异常

ORA-01427: single-row subquery returns more than one row 01427. 00000 - "single-row subquery returns more than one row"

请确保您的子查询返回单行值。

有点猜测,因为我没有您的数据或业务逻辑,但您可能需要以下内容。我已从子查询中删除了
gh212_table1
的第二个实例,并将
t3
链接回正在更新的表:

update gh212_table1 t
set    gh212_link =
       ( select distinct t1.gh201_attributex
         from   gh210_table3 t3
                left join gh201_table1 t1 on t1.gh201_id = t3.gh210_gh201_id
         where  t3.gh210_id = t.gh212_gh210_id )
where  gh212_table1.gh212_attributey = '11';
但是,如果在
gh212_table1
中有子查询找不到行的行,那么这仍然可能有问题,因为对于这些行,
gh212_link
将设置为null。如果这是一个问题,您可以尝试将其重写为
合并

merge into gh212_table1 tgt
using ( select distinct t3.gh210_id, t1.gh201_attributex
        from   gh210_table3 t3
               left join gh201_table1 t1 on t1.gh201_id = t3.gh210_gh201_id ) src
on    ( src.gh210_id = tgt.gh212_gh210_id )
when  matched then update
      set tgt.gh212_link = src.gh201_attributex;

当您从外部联接获取
gh201_attributex
时,只要
gh210_表3
行的
gh201_表1
中没有行,则该属性将为null。这就是你想要的吗?在
合并
版本中,如果将其设置为内部联接,则合并将仅应用于存在行的位置。

错误很明显:您的子查询返回多行,这在更新上下文中没有意义,因为更新赋值的右侧只需要一个值。您应该向我们展示一些示例数据,这些数据解释了您尝试执行的操作。您可以在select语句中添加rownum=1,您不应该得到错误,但是这是逻辑错误。感谢您的回复!我很清楚多行的问题,但不知何故我无法解决它。甚至当我尝试这个独特的查询时。但你的解决方案似乎奏效了,所以非常感谢。你毁了我的一天:)