我有一个脚本,该脚本已在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
答案 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