我想从oracle中的子记录值更新父记录

我想从oracle中的子记录值更新父记录,oracle,Oracle,我期待更新下表 Column1 Column2 Column3 ------- ------- ------- 123 231 123 Abc 431 123 Abc 更新后,表应该如下所示 Column1 Column2 Column3 ------- ------- ------- 123 Abc 231 123 Abc 431 123 Abc 我必须在oracle中更新一个表的20多万条记录

我期待更新下表

Column1 Column2 Column3
------- ------- -------
    123
    231     123 Abc
    431     123 Abc
更新后,表应该如下所示

Column1 Column2 Column3
------- ------- -------
    123         Abc
    231     123 Abc
    431     123 Abc
我必须在oracle中更新一个表的20多万条记录。这里的任何帮助都将不胜感激

UPDATE yourTable t1
SET col3 = (SELECT DISTINCT t2.col3 FROM yourTable t2 WHERE t1.col1 = t2.col2)
WHERE col3 IS NULL

此解决方案假定出现在
col1
中的子项始终共享一个公共父项。如果没有,则我的查询将失败,但您当前更新表的方法也将失败。

您可以使用
合并执行更新

MERGE INTO table_name dst
USING
(
  SELECT   col2,
           MIN( col3 ) AS col3
  FROM     table_name
  GROUP BY col2
  HAVING   MIN( col3 ) = MAX( col3 )
) src
ON ( dst.col2 IS NULL AND dst.col1 = src.col2 )
WHEN MATCHED THEN
  UPDATE SET col3 = src.col3 WHERE col3 IS NULL;

HAVING
行位于该行中,以防止在孩子可能对
col3
列具有不同值时进行更新。

请编辑您的问题,以表格格式发布数据,作为格式化文本;另外,请添加您所需的结果和您迄今为止所做的尝试。如果您有另一行,比如说
555231,'A'
?对于upvoter,这个问题如何显示您的努力?或者它有用且清晰吗?或者甚至是
765123,DEF
?(同一父母的孩子有不同的
col3
值)您最近的编辑使问题更难理解。在结束之前,您可能想做些什么。当您有行时会发生什么:
231123,A
444123,B
?@MT0如果我正确阅读OP,则不会发生这种情况,因为所有子项都应该共享一个共同的父项。如果记录数量很大,则工作速度太慢,我有超过286560条记录要更新。Racle不支持更新连接语法,因此这可能是您唯一的选择。OP的示例中碰巧有子项对
col3
具有相同的值,但我在帖子中没有看到任何内容表明此条件是强制的。