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 - Fatal编程技术网

Sql 基于相同字段的更新字段不为空

Sql 基于相同字段的更新字段不为空,sql,oracle,Sql,Oracle,为这个糟糕的标题道歉。不知道如何简洁地表达我的需求。我知道MySQL可以解决这个问题,但它不适用于Oracle 我有一个表,其中我的OrderID字段与订单上的行项目不同。当用户从订单中删除某些行项目并批准订单时,我将获得已批准行项目的完成日期,以及已删除行项目的空值。我需要更新订单上所有行的完成日期。这就是它看起来的样子 这就是我要找的 我发现,如果我选择一个特定的OrderID,代码就会更新,但如果我打开它扫描整个表,显然需要35个小时,这是不可行的 update batchmgr.udt_

为这个糟糕的标题道歉。不知道如何简洁地表达我的需求。我知道MySQL可以解决这个问题,但它不适用于Oracle

我有一个表,其中我的OrderID字段与订单上的行项目不同。当用户从订单中删除某些行项目并批准订单时,我将获得已批准行项目的完成日期,以及已删除行项目的空值。我需要更新订单上所有行的完成日期。这就是它看起来的样子

这就是我要找的

我发现,如果我选择一个特定的OrderID,代码就会更新,但如果我打开它扫描整个表,显然需要35个小时,这是不可行的

update batchmgr.udt_buyer a set a.completedate=(select b.completedate from batchmgr.udt_buyer b where b.completedate is not null and b.orderid=a.orderid) where a.orderid ='221292540';
您可以使用:

update batchmgr.udt_buyer b
    set completedate = (select b2.completedate
                        from batchmgr.udt_buyer b2
                        where b2.completedate is not null and
                              b2.orderid = b.orderid and
                              rownum = 1
                       )
    where b.orderid = '221292540' and b.completedate is null;
为了提高性能,需要在orderid completate上建立索引

另外,请确保orderid是一个字符串。如果没有,请将单引号放在常量比较上。

如果同一订单有不同的完成日期,我将使用max:

更新batchmgr.udt\u买方a set a.completedate=选择maxb.completedate 来自batchmgr.udt\u买方b 其中,b.completedate不为空 b.orderid=a.orderid 其中a.orderid='221292540'; 或者,您可以使用分析函数max over创建一个视图,以便在不进行更新的情况下获得相同的视图:

创建或替换“查看订单”项目作为 选择 医嘱ID 买主 ,订单类型 项目 ,CreateDate ,MaxCompletedAte按医嘱ID作为CompleteDate进行超额分配 来自batchmgr.udt_买方;
但是最好将数据标准化,并将订单与订单项目分开存储。

谢谢!由于重复,我不得不在orderid、item和completedate上建立索引,但在这之后它工作得很好