我有一个脚本,我在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
在标准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
是唯一或主键,否则子查询将返回多行,这将导致错误)。
您也可以在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