SQL:如何填充所有空代码字段

时间:2013-07-26 06:47:58

标签: sql while-loop db2

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

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

我的表就像那样

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

理想情况下,我需要在一个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,

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

有没有使用程序或功能的解决方案?

2 个答案:

答案 0 :(得分: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(如果有)。如果表B没有代码值,我相信subselect将返回null(假设表B中的代码列可以为空)并且表A上的代码值将保持为null。

答案 1 :(得分: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