如何将Postgres脚本传输到hsqldb脚本?

时间:2019-04-24 05:26:31

标签: java sql postgresql hsqldb liquibase

我有一个脚本,该脚本已在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条记录,其中view_B中存在company_code并设置table_A.company_number = view_B.company_number_correct_answer

2 个答案:

答案 0 :(得分: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是唯一键或主键,否则子查询将返回多个行,这将导致错误。)

答案 1 :(得分: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