我对此有任何建议。
我有两个表,我必须使用驻留在另一个辅助表中的数据更新主表中的列。我不能依赖于视图等,因为将来APEX中的用户必须能够编辑这些数据。我基本上是为用户预先填充数据,以减少他们的手动输入。
主要表= Table 1
次要表= Table 2
要在Table 1
= FTE_ID
,ACCOUNT_TYPE
数据来自Table 2
= R_ID
,ACCOUNT_TYPE
两个表中的公共列= TABLE1.FID
和TABLE2.FID
这是我尝试过的,但我得到“单行子查询返回多行”,因为table1.fid
中有多个table1
行。我基本上想要为TABLE1.FID = TABLE2.FID
。
这是我的尝试:
UPDATE TABLE1
SET TABLE1.FTE_ID =
(SELECT TABLE2.R_ID FROM TABLE2 WHERE TABLE1.FID = TABLE2.FID);
错误:
单行子查询返回多行
感谢您的帮助,
答案 0 :(得分:0)
您可以使用聚合或行号来修复邻近问题:
UPDATE TABLE1
SET TABLE1.FTE_ID = (SELECT MAX(TABLE2.R_ID)
FROM TABLE2
WHERE TABLE1.FID = TABLE2.FID
);
子查询只能返回一行;它是可能匹配值的“任意”值。
如果字段是字符字段并且您想要所有匹配的值,那么listagg
可能更合适:
UPDATE TABLE1
SET TABLE1.FTE_ID = (SELECT LISTAGG(t2.R_ID, ',') WITHIN GROUP (ORDER BY t2.R_ID)
FROM TABLE2 t2
WHERE TABLE1.FID = t2.FID
);