如何将postgres脚本转移到hsqldb脚本?

问题描述 投票:0回答:2

我有一个脚本,我在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:user缺少未找到的权限或对象:b.columnB2由以下原因引起:org.hsqldb.HsqlException:user缺少未找到的权限或对象: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

java sql postgresql hsqldb liquibase
2个回答
1
投票

在标准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是唯一或主键,否则子查询将返回多行,这将导致错误)。


0
投票

您也可以在HSQLDB中使用MERGE

MERGE INTO tableA af
USING (select columnB1, columnB2 from.....) as b
ON af.columnA1 = b.columnB1
WHEN MATCHED THEN
UPDATE SET af.columnA2 = b.columnB2
© www.soinside.com 2019 - 2024. All rights reserved.