如何使用连接更新DB2表?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用连接更新DB2表?相关的知识,希望对你有一定的参考价值。
我有两个表,我想通过加入它们来更新。我正在使用DB2 V9.7。
ORDER_APPROVALS
ORDER_ID CREATED_BY_ID CREATED_BY_NAME PROCESS_DT
-------------------------------------------------------
234 2 admin (null)
307 2 admin (null)
313 2 admin 11-11-2013
订单属性
ORDER_ID ATTRIBUTE_ID VALUE
-----------------------------------
234 123 ? --(ORDER_APPROVALS.CREATED_BY_NAME)
307 123 ? --(ORDER_APPROVALS.CREATED_BY_NAME)
我想针对Attribute_ID 123更新值字段。到目前为止,我尝试了以下查询。但这不起作用。我在Netezza尝试过类似的加入方式。想知道,如何在DB2中做到这一点?
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 and OT.ORDER_ID in
(select ORDER_ID from ORDER_APPROVALS where PROCESS_DT is NULL)
答案
您正在寻找MERGE
声明:
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_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
)
另一答案
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
这就够了。
以上是关于如何使用连接更新DB2表?的主要内容,如果未能解决你的问题,请参考以下文章