使用另一个表

时间:2015-12-28 19:06:12

标签: sql oracle

我对此有任何建议。

我有两个表,我必须使用驻留在另一个辅助表中的数据更新主表中的列。我不能依赖于视图等,因为将来APEX中的用户必须能够编辑这些数据。我基本上是为用户预先填充数据,以减少他们的手动输入。

主要表= Table 1

次要表= Table 2

要在Table 1 = FTE_IDACCOUNT_TYPE

中更新的列

数据来自Table 2 = R_IDACCOUNT_TYPE

的列

两个表中的公共列= TABLE1.FIDTABLE2.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);

错误:

  

单行子查询返回多行

感谢您的帮助,

1 个答案:

答案 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
                        );
相关问题