I have two tables and I want to update by joining them. I am using DB2 V9.7.
ORDER_APPROVALS
ORDER_ID CREATED_BY_ID CREATED_BY
I think you need to use a derived table to accomplish this:
update order_attributes
set value = (
select
created_by_name
from(
select
created_by_name,
oa.order_id
from
order_approvals oa
left outer join order_attributes ot
on oa.order_id = ot.order_id
AND OT.ATTRIBUTE_ID = 123
and OT.ORDER_ID in
(select ORDER_ID from ORDER_APPROVALS where PROCESS_DT is NULL)
) ORDERS
WHERE orders.order_id = order_attributes.order_Id
)
You are looking for the MERGE statement:
merge into ORDER_ATTRIBUTE ot
using (select ORDER_ID, CREATED_BY_NAME
from ORDER_APPROVALS
where PROCESS_DT is null) oa
on
(ot.ORDER_ID = oa.ORDER_ID)
when matched
and ot.ATTRIBUTE_ID = 123
then update set VALUE = oa.CREATED_BY_NAME;
update ORDER_ATTRIBUTE OT set OT.VALUE =
(select CREATED_BY_NAME from ORDER_APPROVALS OA
where OA.ORDER_ID = OT.ORDER_ID and OA.PROCESS_DT is NULL)
where OT.ATTRIBUTE_ID = 123
With this it's enough.