如何用Liquibase YML脚本通过表B列值更新表A列?脚本未生效
问题原因
你写的Liquibase YML脚本无法运行,是因为Liquibase的update节点属于单表更新语法,不支持在value和where子句中直接关联另一张表(表B)。
解决方案
可以通过两种方式实现需求:
方式1:使用原生SQL标签(推荐,适配不同数据库)
直接用sql节点编写数据库原生的关联更新语句,不同数据库语法略有差异,以下是常见示例:
MySQL/MariaDB 版本
databaseChangeLog: - changeSet: id: update-name author: xyz changes: - sql: sql: | UPDATE A INNER JOIN B ON A.a_id = B.id SET A.name = B.name;
PostgreSQL 版本
databaseChangeLog: - changeSet: id: update-name author: xyz changes: - sql: sql: | UPDATE A SET name = B.name FROM B WHERE A.a_id = B.id;
方式2:使用Liquibase结构化标签(子查询方式)
如果想坚持用Liquibase的update节点,可以通过子查询获取表B的name值,仅适用于一对一关联场景:
databaseChangeLog: - changeSet: id: update-name author: xyz changes: - update: tableName: A columns: - column: name: name value: (SELECT B.name FROM B WHERE B.id = A.a_id) where: EXISTS (SELECT 1 FROM B WHERE B.id = A.a_id)
内容的提问来源于stack exchange,提问作者Rahul Sharma
相关产品推荐
相关产品推荐

