Sql 在Oracle中更新时使用内部联接
我有两张桌子: 我想用合适的年龄更新我的表1记录,可以在表2中找到。唯一标识符是BVD_ID_编号。我尝试使用以下代码来实现这一点Sql 在Oracle中更新时使用内部联接,sql,oracle,Sql,Oracle,我有两张桌子: 我想用合适的年龄更新我的表1记录,可以在表2中找到。唯一标识符是BVD_ID_编号。我尝试使用以下代码来实现这一点 UPDATE table1 SET table1.age = (select table2.age2 from (select distinct table2.BVD_ID_NUMBER, table2.age2 FROM table1 inner JOIN table2 on table
UPDATE table1
SET table1.age =
(select table2.age2
from
(select distinct table2.BVD_ID_NUMBER, table2.age2
FROM table1
inner JOIN table2
on table1.ACQUIROR_BVD_ID_NUMBER=table2.BVD_ID_NUMBER)
where table2.BVD_ID_NUMBER=table1.ACQUIROR_BVD_ID_NUMBER);
我收到了以下错误:
SQL错误:ORA-00904:“ORBIS_DISTINCT”。“BVD_ID_编号”:无效标识符
90400000-%s:无效标识符
有什么帮助吗?Hmmm。您的查询过于复杂了。通常,在使用相关子查询时,没有理由在内部子查询中提及外部表。Oracle不允许关联子查询的范围超出一个级别,因此需要简化关联子句:
UPDATE table1 t1
SET age = (select t2.age2
from table2 t2
where t1.ACQUIROR_BVD_ID_NUMBER = t2.BVD_ID_NUMBER
);
这可能会导致“子查询返回多行”类型的错误。要解决此问题,请使用聚合或rownum=1
:
UPDATE table1 t1
SET age = (select t2.age2
from table2 t2
where t1.ACQUIROR_BVD_ID_NUMBER = t2.BVD_ID_NUMBER and
rownum = 1
);
我不认为他试图观察下1级以上的范围,他只是没有任何别名。@sagi。我修正了答案。你是对的。Oracle错误消息显然与问题中的查询不符,因此我忽略了它。它就像一个符咒,可以修复作业!