Sql 使用另一个表中的数据更新表中一列的所有行
我很感激你给我的建议 我有两个表,其中我必须使用另一个辅助表中的数据更新主表中的一列。我不能依赖于视图等,因为这些数据必须能够由用户在APEX中编辑。我基本上是为用户预填充数据,以减少他们的手动输入 主表=Sql 使用另一个表中的数据更新表中一列的所有行,sql,oracle,Sql,Oracle,我很感激你给我的建议 我有两个表,其中我必须使用另一个辅助表中的数据更新主表中的一列。我不能依赖于视图等,因为这些数据必须能够由用户在APEX中编辑。我基本上是为用户预填充数据,以减少他们的手动输入 主表=表1 二级表=表2 表1中待更新的列=FTE\u ID,科目类型 数据将来自表2的列=R\u ID,账户类型 两个表中的公共列=TABLE1.FID和TABLE2.FID 这是我尝试过的,但是我得到了“单行子查询返回多行”,因为在table1中有多个table1.fid行。我基本上希望对TAB
表1
二级表=表2
表1中待更新的列=FTE\u ID
,科目类型
数据将来自表2的列=R\u ID
,账户类型
两个表中的公共列=TABLE1.FID
和TABLE2.FID
这是我尝试过的,但是我得到了“单行子查询返回多行”,因为在table1
中有多个table1.fid
行。我基本上希望对TABLE1.FID=TABLE2.FID
的所有行执行此更新
以下是我的尝试:
UPDATE TABLE1
SET TABLE1.FTE_ID =
(SELECT TABLE2.R_ID FROM TABLE2 WHERE TABLE1.FID = TABLE2.FID);
错误:
单行子查询返回多行
感谢您的帮助,您可以通过使用聚合或行号修复近似问题:
UPDATE TABLE1
SET TABLE1.FTE_ID = (SELECT MAX(TABLE2.R_ID)
FROM TABLE2
WHERE TABLE1.FID = TABLE2.FID
);
子查询只能返回一行;它是来自可能匹配值的“任意”值
如果字段是字符字段,并且您需要所有匹配值,那么listag
可能更合适:
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
);
这实际上使我意识到了实际问题,即我在两个表中都有重复项,因此您的listagg解决方案。明亮的我现在正在测试我的新(修改)表。非常感谢。