带有连接查询的DB2 Update

时间:2011-11-04 11:05:26

标签: join 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)

我必须更新DATA表,但是B_DESC和P_DESC我必须从C_DATA表中获取它并在UPDATE查询中使用它。

请告诉我怎么做。如果可能,它必须是单个查询。

提前致谢。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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)