java - 如何将 postgres 脚本传输到 hsqldb 脚本?
问题描述
我有一个脚本,我在 postgres db 中成功运行,但是当我在 hsqldb 中运行时它失败了。有人可以帮我更改此 sql 以使其适用于 HSQLDB 和 Postgres DB 吗?下面是我的脚本:
UPDATE tableA af
SET columnA2 = b.columnB2
from
( select columnB1, columnB2 from.....) as b
Where af.columnA1 = b.columnB1;
当我在 hsqldb 中运行它时,这会引发以下异常:
引起:java.sql.SQLSyntaxErrorException:用户缺少特权或找不到对象:b.columnB2 引起:org.hsqldb.HsqlException:用户缺少特权或找不到对象:b.columnB2
谢谢。
更新:我创建了另一个视图以使我的问题更清楚。
table_A 有 2 列:company_code、company_number 和 view_B 有 2 列:company_code、company_number_correct_answer
table_A 有 10000 行,而 view_B 只有 2 行。 我想要的是更新 table_A 中的 2 条记录,company_code 存在于 view_B 中并设置 table_A.company_number = view_B.company_number_correct_answer
解决方案
在标准 SQL 中,FROM 子句(或 JOIN 或类似的东西)对 UPDATE 语句无效。
如果您想要一个适用于多个数据库产品的 UPDATE 语句,您将不得不使用一个共同相关的子查询:
update table_a
set columna2 = (select columnb2
from table_b
where table_b.columnb1 = table_a.columna1)
where exists (select *
from table_b
where table_b.columnb1 = table_a.columna1);
请注意,这要求它table_b.columnb1
是唯一键或主键,否则子查询将返回多行,这将导致错误)。
推荐阅读
- c# - 如何提示用户他们可以滚动?
- uitableview - 无法将带有标识符的单元格出列必须为标识符注册一个 nib 或类或连接故事板中的原型单元格
- javascript - pusher.js php中发送者和接收者聊天中的相同消息
- java - 如何将字符串拆分两次并自动创建一个表(包含 n 个元素)?
- sql - 如何在2个字符串之间提取字符串
- algorithm - 模拟退火是一种蒙特卡罗方法吗?
- c# - 使用 .NET API 以正确的方式将元素添加到模型空间
- sql-server - SQL Server 用户定义的表类型/Crystal Reports 错误
- quickbooks - 用于检索 TxnID 的 XML
- javascript - 如何将以下数组数据分组到上述结构?