我的查询是这个。它没有显示错误。但是由于执行时间过长,Iam被迫关闭。请检查
update trans_rec a
set a.qty = (select b.qtydes from itbg_store_delchellan b where b.icode =
a.icode and a.controlno=b.DEL_NO AND A.controlno IS NOT NULL)
where exists
(select b.qtydes from itbg_store_delchellan b where b.icode = a.icode and
a.controlno=b.DEL_NO AND A.controlno IS NOT NULL )
答案 0 :(得分:1)
您可以按照以下方式重新编写查询:
UPDATE trans_rec a
SET a.qty =
(SELECT b.qtydes
FROM itbg_store_delchellan b
WHERE b.icode = a.icode and a.controlno=b.DEL_NO)
WHERE a.controlno IS NOT NULL
AND EXISTS
(SELECT b.qtydes FROM itbg_store_delchellan b
WHERE b.icode = a.icode AND a.controlno=b.DEL_NO)
此后,您必须在字段搜索中添加索引,如下所示:
在这些字段上添加以下过滤器
答案 1 :(得分:0)
尝试此更新:
UPDATE A
SET qty = B.qtydes
from trans_rec AS A
INNER JOIN itbg_store_delchellan B
ON B.icode = A.icode
AND A.controlno=b.DEL_NO
AND A.controlno IS NOT NULL
答案 2 :(得分:0)
您可以在Oracle中使用MERGE
语句。
MERGE INTO trans_rec t USING
( select DISTINCT icode,del_no,qtydes
FROM itbg_store_delchellan s
)
ON (
s.icode = t.icode AND t.controlno = s.del_no
)
WHEN MATCHED THEN UPDATE SET t.qty = s.qtydes
WHERE t.controlno IS NOT NULL
答案 3 :(得分:0)
要提高性能,请在itbg_store_delchellan
上创建一个复合索引:
create index idx_itbg_store_delchellan_3 on itbg_store_delchellan(icode, del_no, qtydes)
请注意,条件A.controlno IS NOT NULL
是多余的。相关条件已经过滤掉NULL
个值,因此您可以从两个子查询中删除它。