我正在寻找此查询的替代方案。我知道这样的查询最终会在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:标识符无效
问候。
答案 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
表,因此它没有重复项。从表名称来看,每个代码应该有一行。