我有2张桌子: 我想用适当的年龄更新我的table1记录,可以在表2中找到。唯一标识符是BVD_ID_NUMBER。我尝试使用以下代码
执行此操作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_NUMBER”:标识符无效 00904. 00000 - “%s:无效标识符”
任何帮助?
答案 0 :(得分:1)
嗯。您的查询过于复杂。通常,在使用相关子查询时,没有理由在内部子查询中提及外部表。 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
);