这种写法有没有其它要注意的:update id set (a,b,c)=(select a,b,c from ida where ida.id=id.id) where ……;
刚开始用 update table set ()=(…… where ……);(…… where ……) 的后面没有再加加 where ……,结果把 table 不该修改的记录的相应字段也刷成了 null;
写成 update table set ()=(…… where ……) where (a1, b1) in (select x, y from t1, t2 where……)又担心如果 xy 组合不唯一的话,会不会有其它问题,或者这种 update 写法有其它要注意的地方。
下面是我在 Oracle Erp 里面写的,用到了这种update,请大侠有空帮忙指正一下,谢谢。
--最近成本 tLast====================================================================
UPDATE SJH_CST_ITEM_COSTS SJH SET(/*,*/
MATERIAL_COST,
MATERIAL_OVERHEAD_COST,
OUTSIDE_PROCESSING_COST,
OVERHEAD_COST
,LAST_UPDATED_BY, LAST_UPDATE_DATE
) = (
select
--nvl( tNow.poNowCst, cst.MATERIAL_COST ) 现存成本之物料成本,
nvl(poLastCst, cst.MATERIAL_COST) 最近成本之物料成本,
--nvl(poPreCst, cst.MATERIAL_COST) 预期成本之物料成本,
cst.material_overhead_cost 物料附加成本,
cst.outside_processing_cost 外协费用,
cst.overhead_cost 制造费用
,user_id, sysdate
from
CST_COST_TYPES cType
inner join
cst_quantity_layers cst on cst.Organization_Id = cType.Organization_Id
left join (
select t2.organization_id, t2.Item_Id, rcv21.po_unit_price poLastCst
from rcv_transactions rcv21
inner join po_lines_all poLine21 on rcv21.po_line_id = poLine21.Po_Line_Id
inner join (
select rcv22.organization_id, poLine22.Item_Id, max(rcv22.creation_date) lastMaxCreateDate
from rcv_transactions rcv22
inner join po_lines_all poLine22 on rcv22.po_line_id = poLine22.Po_Line_Id
where trunc( sysdate, 'DD ') -