在Oracle中更新时使用内部联接

时间:2016-03-20 16:19:38

标签: sql oracle

我有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:无效标识符”

任何帮助?

1 个答案:

答案 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
              );