0

私はdb2で作業しているので、いくつかのテーブルがあり、問題は空のコードフィールドをすべて埋める方法です

テーブル内の raw は実際の階層を表しているため、フィールド LINK の情報に従って、CODE フィールドの空でない値を空の CODE フィールドに入れる必要があります。

私のテーブルはそうです

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

理想的には、1 つの CREATE TABLE ... AS SELECT 演算子内でこれを実行して、後で通常のベースで自動的に更新される mqt を作成する必要があります

私が今までに作成したのは

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,

CREATE TABLE AS SELECT 内に配置できない while ループのようなものに違いないと思います

プロシージャまたは関数を使用しないソリューションはありますか?

4

2 に答える 2

1

あなたが探しているのは、「select for update」タイプのクエリだと思います。これは、次のように行うことができます。

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 が null コードで更新されます。テーブル B にコード値がない場合、副選択は null を返し (テーブル B のコード列が null 可能である場合)、テーブル A のそのコードの値は null のままになると思います。

于 2013-08-01T00:24:54.427 に答える
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
于 2013-08-01T00:34:15.200 に答える