Liquibase不使用<sql>标签时能否在<where>标签内编写子查询?
问题解答
结论
你给出的子查询写法在补充括号修正SQL语法后,可以直接在Liquibase的<where>标签内正常生效运行,不需要额外使用<sql>标签。
原理说明
Liquibase的<where>标签不会对内部写入的内容做语法解析或转义,只会将内容直接拼接为最终SQL的WHERE子句部分,只要内容符合你使用的数据库的SQL语法规范,就可以正常执行。
修正后的正确写法
你给出的示例缺少子查询外层的括号,调整后即可正常使用:
<delete tableName="CarDrivers"> <where>DriverID in (select driver.DriverID from Drivers driver where driver.DriverName = 'John Doe')</where> </delete>
注意事项
- 子查询语法需要适配你当前使用的数据库类型,Liquibase不会自动处理不同数据库的子查询语法差异,若需要跨数据库兼容,建议配合
preConditions标签做数据库类型校验 - 正式执行变更前,可通过
liquibase updateSQL命令预览生成的实际SQL,确认子查询拼接逻辑符合预期后再操作
内容的提问来源于stack exchange,提问作者stefan.stt
相关产品推荐
相关产品推荐

