[英]Using inner join when updating in Oracle
我有 2 个表:我想用合适的年龄更新我的 table1 记录,可以在 table2 中找到。 唯一标识符是 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:无效标识符”
有什么帮助吗?
嗯。 您的查询过于复杂。 通常,当使用相关子查询时,没有理由在内子查询中提及外表。 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
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.