更新表格中的值我的值乘以基于条件

时间:2017-10-03 09:54:55

标签: sql oracle

我有两个表格结构如下:

表1:

CREATE TABLE "SYSTEM"."ZILM_SM30_BT_ALL" 
("BT" VARCHAR2(6 BYTE) NOT NULL ENABLE, 
"CHANNEL" VARCHAR2(12 BYTE), 
"PARENT" VARCHAR2(12 BYTE), 
"VD" VARCHAR2(15 BYTE), 
"CURRENCY" VARCHAR2(3 BYTE), 
"AMT" NUMBER(18,2), 
"FXSWAP" NUMBER(18,2), 
"STR_REPO" NUMBER(18,2), 
"REPORTING_DAY" DATE);

Table1

表2:

CREATE TABLE "SYSTEM"."ZILM_SM30_BT_RF" 
("BT" VARCHAR2(6 BYTE) NOT NULL ENABLE, 
"RF" NUMBER(5,4) NOT NULL ENABLE, 
"RATIONALE" VARCHAR2(80 CHAR));

Table2

我需要更新表1中的列STR_REPO,其中表1中AMT中相应值的结果乘以表2中RF的值。表2中的RF值将用作因子是具有与表1中相同BT值的条目中的一个。(EG:表1中的行1:STR_REPO = 162500000 * 0.3333 - >(查找表2的RF列中的值)使用BT="REP")输入

我目前拥有的是:

UPDATE ZILM_SM30_BT_ALL 
SET STR_REPO = (SELECT a.AMT * b.RF
FROM ZILM_SM30_BT_ALL a INNER JOIN ZILM_SM30_BT_RF b
ON a.BT = b.BT)

我得到的错误信息是:

UPDATE ZILM_SM30_BT_ALL 
SET STR_REPO = (SELECT a.AMT * b.RF
FROM ZILM_SM30_BT_ALL a INNER JOIN ZILM_SM30_BT_RF b
ON a.BT = b.BT)
  

错误报告:SQL错误:ORA-01427:单行子查询返回更多   超过一排   01427. 00000 - “单行子查询返回多行”

1 个答案:

答案 0 :(得分:0)

您可以从错误消息中看到,您的内部查询返回多行,这对于更新语句无效。

您需要使用相关查询,目标表的值可供使用:

UPDATE ZILM_SM30_BT_ALL a
SET a.STR_REPO = a.AMT * (SELECT b.RF
                          FROM ZILM_SM30_BT_RF b
                          WHERE a.BT = b.BT)