0

我正在使用 db2,所以我有一些表格,问题是如何填写所有空代码字段

表中的 raws 代表一些现实世界的层次结构,所以我需要根据字段 LINK 中的信息将 CODE 字段的非空值放入空的 CODE 字段中

我的桌子是这样的

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

理想情况下,我需要在一个 CREATE TABLE ... AS SELECT 运算符中执行此操作以创建一个 mqt,该 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,

我认为它一定是某种 while 循环,我不能把它放在我的 CREATE TABLE AS SELECT 中

有没有不使用过程或函数的解决方案?

4

2 回答 2

1

我认为您可能正在寻找的是“选择更新”类型的查询。这可以类似于以下方式完成:

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 = "";

这将使用表 B 中的代码值更新表 A,如果它有一个,则表 A 上的所有行都具有空代码。如果表 B 没有代码值,我相信子选择将返回 null(假设表 B 中的代码列可以为空)并且表 A 上的代码值将保持为空。

于 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 回答