oracle - 使用 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 中寻找正确的等价物。
解决方案
我会使用合并语句,例如:
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);
因为更新需要重复子查询两次以确保它只更新正确的行,而合并对两个表进行连接。
推荐阅读
- r - 使用 ARTool 使用 Align Tank 转换数据执行对比测试会在 R 中产生错误
- javascript - 如何使用 javaScript 验证数字具有 2 位小数精度?
- c# - 如何使用 bool 标志来决定是否在 MyComparer 类中使用 reverse ?
- google-cloud-platform - 如何通过 GCP 中的 HA 类型 PA FW 路由站点到站点 VPN 流量
- markdown - 如何删除 Pandoc markdown 中的顶部表格边界?
- flutter - 无法在 ListView 中滚动 flutter web
- webpack - 在 webpack 项目中使用 billboard.js 开发图表
- json - 邮递员在测试中访问 Json 中的子对象
- javascript - 系统更新后无法将 JS 代码附加到 HTML 页面
- angular - 不能绑定到“showQR”,因为它不是“div”的已知属性?