我想用表B的名称列值更新表A的名称列,其中表B的id存在于表A中。我正在尝试使用液化yml脚本,但它不起作用。
databaseChangeLog:
- changeSet:
id: update-name
author: xyz
changes:
- update:
columns:
- column:
name: name
value: A.name = B.name
tableName: A
where: A.a_id = B.id
是的,就像@raul sharma发现的那样,你总是可以使用"sql";以指定执行此操作的确切SQL。liquibasechange对象用于满足大多数用例,但不能替代SQL。
也就是说,如果您想坚持使用更新更改而不是原始sql,那么您的原始示例应该使用";valueComputed";而不是";值";。
类似:
databaseChangeLog:
- changeSet:
id: update-name
author: xyz
changes:
- update:
columns:
- column:
name: name
valueComputed: A.name = B.name
tableName: A
where: A.a_id = B.id
使用";valueComputed";让liquibase知道它不是字符串,而是函数/计算,因此不应该被引用。
最后,我找到了一种为此编写Liquibase脚本的方法,我将其发布在这里,这可能对某人有所帮助。我刚刚调用了本机查询,用于将数据从表B.name更新为A.name。
databaseChangeLog:
- changeSet:
id: update-name
author: xyz
changes:
- sql:
update A set name = b.name from B b where id = b.id;