如何使用liquibase-yml脚本按表B列值更新表A列



我想用表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;

相关内容

  • 没有找到相关文章

最新更新