我想从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
具有相同的值,但我在帖子中没有看到任何内容表明此条件是强制的。