2011-11-04 72 views
2

我正在使用DB2来执行下面的更新操作。加入查询的DB2更新

update DATA set B_DESC=P_DESC, P_DESC=null 
where B_DESC= *, P_DESC=* 
(Select B_DESC,P_DESC from C_DATA) 

的下面实际上是可能的,但因为复杂的连接都参与了该子查询是不建议使用如下

update DATA set B_DESC=P_DESC, P_DESC=null 
where B_DESC= (Select B_DESC from C_DATA), P_DESC=(Select P_DESC from C_DATA) 

我要更新数据表,但B_DESC和P_DESC我必须从C_DATA表中取出并在UPDATE查询中使用它。

请让我知道如何去做。如果可能的话,它必须是单个查询。

在此先感谢。

回答

6

使用合并查询更新表,而不是加盟。 DB2不接受加盟,为此目的更新查询,你必须使用一个合并:

MERGE INTO TABLE_NAME1 A 
    USING (SELECT COL1, COL2 FROM TABLE_NAME2) B 
    ON A.COL1 = B.COL2 
    WHEN MATCHED AND A.COL1 = B.COL2 
    THEN UPDATE SET A.COL1 = B.COL2; 
0

您的第一个查询不起作用吗?我不熟悉WHERE子句的逗号分隔部分(它对我的DB2版本无效 - 它实际上是语法的一部分吗?)。

通常,当我需要运行这些类型的更新查询,我使用EXISTS条款,如:

UPDATE data as a SET b_desc = p_desc, p_desc = null 
WHERE EXISTS (SELECT '1' 
       FROM c_data as b 
       WHERE b.b_desc = a.b_desc 
       AND b.p_desc = a.p_desc) 
+0

'@ X-Zero'我不认为,'并且需要在'WHERE b.p_desc = a.p_desc' '子句,这可能会限制许多更新。 '@ rozar'你说什么? –

+0

@RajaReddy - 他曾经(我认为)一个AND条款开始,所以这就是我选择的。 –