替代更新SQL查询

时间:2014-08-09 11:34:08

标签: sql oracle

我正在寻找此查询的替代方案。我知道这样的查询最终会在Oracle中出现无效的标识符。所以请给我相同的查询,以便从另一个表中的另一个字段更新一个字段。

update RBT_CMP_RECOM_9304 
set FIRST_RECOM_NAME=(select rbt_cmp_base_code.RBT_NAME 
                        from rbt_cmp_base_code 
                       where rbt_cmp_base_code.RBT_CODE=RBT_CMP_RECOM_9304.FIRST_RECOM)
where rbt_cmp_base_code.RBT_CODE=RBT_CMP_RECOM_9304.FIRST_RECOM;

仅供参考:

RBT_CMP_RECOM_9304=(firt_recom,first_recom_name)

RBT_CMP_BASE_CODE = (rbt_code, rbt_name)

我在尝试时遇到此错误:

  

ORA-00904:RBT_CMP_BASE_CODE.RBT_CODE:标识符无效

问候。

1 个答案:

答案 0 :(得分:3)

一种方法是重复子查询:

update RBT_CMP_RECOM_9304 r
    set FIRST_RECOM_NAME = (select bc.RBT_NAME 
                            from rbt_cmp_base_code bc
                            where bc.RBT_CODE = r.FIRST_RECOM
                           )
    where exists (select 1
                  from rbt_cmp_base_code bc
                  where bc.RBT_CODE = r.FIRST_RECOM
                 );

编辑:

如果您收到的错误是返回了多行,则必须确定哪个值。您的代码中没有任何内容表明这可能是一个问题(提示:示例数据和所需结果始终有助于提问)。

最简单的解决方案是使用和聚合功能:

update RBT_CMP_RECOM_9304 r
    set FIRST_RECOM_NAME = (select max(bc.RBT_NAME)
                            from rbt_cmp_base_code bc
                            where bc.RBT_CODE = r.FIRST_RECOM
                           )
    where exists (select 1
                  from rbt_cmp_base_code bc
                  where bc.RBT_CODE = r.FIRST_RECOM
                 );

但您可能想要修复rbt_cmp_base_code表,因此它没有重复项。从表名称来看,每个代码应该有一行。