Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用另一个表中的数据更新表中一列的所有行_Sql_Oracle - Fatal编程技术网

Sql 使用另一个表中的数据更新表中一列的所有行

Sql 使用另一个表中的数据更新表中一列的所有行,sql,oracle,Sql,Oracle,我很感激你给我的建议 我有两个表,其中我必须使用另一个辅助表中的数据更新主表中的一列。我不能依赖于视图等,因为这些数据必须能够由用户在APEX中编辑。我基本上是为用户预填充数据,以减少他们的手动输入 主表=表1 二级表=表2 表1中待更新的列=FTE\u ID,科目类型 数据将来自表2的列=R\u ID,账户类型 两个表中的公共列=TABLE1.FID和TABLE2.FID 这是我尝试过的,但是我得到了“单行子查询返回多行”,因为在table1中有多个table1.fid行。我基本上希望对TAB

我很感激你给我的建议

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

主表=
表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解决方案。明亮的我现在正在测试我的新(修改)表。非常感谢。