我有两个表格结构如下:
表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);
表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));
我需要更新表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 - “单行子查询返回多行”
答案 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)