2013-07-26 3 views
0

모든 빈 코드를 채우는 방법을 필드 그래서 내가 어떤 테이블이 있고 문제는 일부 실제 계층 구조 그래서를 나타내는 모든 빈 코드 필드를 테이블에SQL : 나는 DB2 함께 일하고 있어요

RAWS를 채우는 방법입니다 난 내 표는 그

Objid link code 
1  0  555 
2  1 
3  2 
4  3 

처럼

이상적으로 내가이 안에 하나를 수행하는 데 필요한 필드 LINK의 정보에 따라 빈 코드 필드에 코드 필드의 비어 있지 않은 값을 둘 필요 나중에 자동으로 일반 기초에 갱신 될 것 인 MQT를 만들 ... AS SELECT 연산자를 테이블 만들기

모든 내가 지금까지 만든이

CASE 
     WHEN (code is NULL or code = '') 
      THEN (select code from some_other_table 
        where objid = link and code is not NULL 
      ) 
      WHEN (code != '' and code is not NULL) 
      THEN code 
      ELSE NULL 
     END AS code, 

내가 그 동안 루프의 일종해야합니다 생각입니다 나는 내 테이블에 넣을 수 없습니다. SELECT

절차 나 기능을 사용하지 않고 해결책이 있습니까?

+0

사용중인 DB2 릴리스 및 실행중인 OS는 무엇입니까? IBM i를 사용하기에 운이 좋으면 솔루션이 더 간단 할 수 있습니다. – WarrenT

+0

DB2 9 사용, zOs에서 실행 – Sergey

답변

2

당신이 찾고있는 것이 "업데이트 선택"유형 쿼리라고 생각합니다. 이것은 다음과 같은 수행 할 수 있습니다 : 그것은 하나가있는 경우

UPDATE SOME_DB.SOME_TABLE A 
SET CODE = (SELECT SOME_CODE_FIELD 
       FROM SOME_OTHER_DB.SOME_OTHER_TABLE B 
      WHERE A.KEY = B.KEY) 
WHERE CODE IS NOT NULL 
    OR CODE = ""; 

이 널 코드 테이블 A의 모든 행에 대해, 테이블 B의 코드 값 테이블 A를 업데이트합니다. 테이블 B에 코드 값이없는 경우 subselect는 null을 반환합니다 (표 B의 코드 열이 null 인 경우). 테이블 A의 해당 코드 값은 null로 유지됩니다.

0

CREATE TABLE AS SELECT를 수행하는 경우 누락 된 코드가있는 테이블에 조인 할 수 없습니까?

SELECT 
COALESCE(CASE WHEN code='' THEN null ELSE code END,so.code) as code 
FROM CodeTable ct 
LEFT JOIN SomeOtherCodeTable so ON 
ct.objid = so.link 
AND so.code IS NOT NULL 
관련 문제