首页 > 解决方案 > 使用 Oracle 中的内部连接进行更新不起作用

问题描述

将查询从 Access 转换为 Oracle 不起作用

使用权

UPDATE 
     Table1 
INNER JOIN      
     Table2
ON  (Table1.ID = Table2.ID) AND (Table1.AREA = Table2.AREA) 
SET Table2.LAT = Table1.LAT, Table2.LON = Table1.LON;   

甲骨文

UPDATE 
    Table1 
SET
    Table2.LAT= (SELECT Table1.LAT FROM Table1  WHERE Table1.ID = Table2.ID  AND Table1.AREA = Table2.AREA );

在 Oracle 中出现此错误

错误报告 -

SQL Error: ORA-00904: "Table2"."LAT": invalid identifier
00904. 00000 -  "%s: invalid identifier"

在 Oracle 中寻找正确的等价物。

标签: oraclems-accesssql-update

解决方案


我会使用合并语句,例如:

merge into table2 tgt
  using table1 src
    on (tgt.id = src.id and tgt.area = src.area)
when matched then
  update set tgt.lat = src.lat,
             tgt.lon = src.lon;

这应该比相应的更新语句更高效:

UPDATE table2
SET    (table2.lat, table2.lon) = (SELECT table1.lat,
                                          table1.lon
                                   FROM   table1
                                   WHERE  table1.id = table2.id
                                   AND    table1.area = table2.area)
WHERE  EXISTS (SELECT NULL
               FROM   table1
               WHERE  table1.id = table2.id
               AND    table1.area = table2.area);

因为更新需要重复子查询两次以确保它只更新正确的行,而合并对两个表进行连接。


推荐阅读