Join 使用连接查询进行DB2更新

Join 使用连接查询进行DB2更新,join,db2,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),

我正在使用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_数据表中获取它,并在更新查询中使用它

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


提前感谢。

您的第一个查询是否无效?我不熟悉用逗号分隔的
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)

使用合并查询来更新表,而不是联接。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;

@X-Zero
我不认为,
WHERE
子句中需要
和b.p_desc=a.p_desc
,这可能会限制许多更新
@rozar
你说什么?@RajaReddy-他(我认为是)有一个
从句,所以我选择了这个从句。