2011-11-04 2 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

테이블을 업데이트하는 대신 가입 병합 쿼리를 사용합니다. ,

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' 내 생각 해달라고'과 b.p_desc = a.p_desc'은 WHERE'필요하다 : DB2는 그 목적에 대한 업데이트 쿼리에 참여 허용하지 않습니다, 당신은 병합을 사용해야합니다 '절을 사용하면 많은 업데이트를 제한 할 수 있습니다. '@ rozar' 뭐라고하니? –

+0

@RajaReddy - 그는 (내가 무엇을하려고했는지) 'AND' 절로 시작 했으므로 내가 선택한 것입니다. –