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 最多一行。否则,您需要对其进行汇总。
我正在使用 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 最多一行。否则,您需要对其进行汇总。