sql liquibase 使用连接表时出现语法错误

sql syntax error with liquibase using join tables

我正在使用 liquibase,我有一个 sql 脚本:

   <changeSet id="fileSteps-updateUserIdFromMessage" author="aymen">
    <sql>
        update edi_file_steps fs INNER JOIN GU_User u
        on u.login = SUBSTRING(fs.message,
        locate('[',fs.message)+1,
        LENGTH(fs.message)-locate('[',fs.message)-1)
        set user_id= u.id,
        message= SUBSTRING(fs.message, 0, locate('[',fs.message)-1)
        where message LIKE '%Downloaded%' ;
    </sql>
</changeSet>

我的脚本在 mysql 上运行良好。但是我的 java 程序 运行 在 hsql 数据库上。对我来说,这个脚本应该也适用于 hsqldb,因为它是一个纯粹的 sql 语法。但我收到此错误:

liquibase.exception.DatabaseException: unexpected token: INNER required: SET

HyperSQL 数据库未在 UPDATE 语句中实现连接。参见 HSQLDB Update Statement

您需要重新表述该查询。

HyperSQL 中等效的有效查询可能类似于:

update edi_file_steps fs
  set user_id = (
    select u-id 
    from GU_User u
    where u.login = SUBSTRING(fs.message, locate('[',fs.message)+1, 
                              LENGTH(fs.message)-locate('[',fs.message)-1)
  ),
  message= SUBSTRING(fs.message, 0, locate('[',fs.message)-1)
where message LIKE '%Downloaded%';

假设子查询是一个 "scalar subquery" 它应该可以工作。标量意味着查询 returns 最多一行。否则,您需要对其进行汇总。