Liquibase脚本基于其他表元素

时间:2016-12-07 13:57:02

标签: liquibase

我对liquibase脚本非常不熟悉。

  1. 我有两个表,tableA和tableB。
  2. tableB包含具有tableA_fk值的元素。这意味着它们指向tableA的一个元素。
  3. tableA包含始终由两个一组组成的元素。其中一个元素指向另一个元素的pk(relatedpk)。
  4. 我想删除tableA中包含字段" someValue"的所有元素。等于NULL,没有tableB的元素指向它。
  5. 元素只能由两个
  6. 组删除

    示例:

    tableA:
    
    +----+---------------------+-----------+-----------+
    | pk | name                | someValue | relatedpk |
    +----+---------------------+-----------+-----------+
    |  1 | ElementA            |         1 |      NULL |
    |  2 | ElementA            |         1 |         1 |
    |  3 | ElementB            |      NULL |      NULL |
    |  4 | ElementB            |      NULL |         3 |
    |  5 | ElementC            |         3 |      NULL |
    |  6 | ElementC            |         3 |         5 |
    |  7 | ElementD            |      NULL |      NULL |
    |  8 | ElementD            |      NULL |         7 |
    |  9 | ElementE            |      NULL |      NULL |
    | 10 | ElementE            |      NULL |         9 |
    +----+---------------------+-----------+-----------+
    
    tableB:
    
    +----+------------------------------+-----------+
    | pk | name                         | tableA_fk |
    +----+------------------------------+-----------+
    |  1 | Value1                       |        2  |
    |  2 | Value2                       |        3  |
    |  3 | Value3                       |        9  |
    +----+------------------------------+-----------+
    

    在这个例子中,我想从tableA中删除带有pk = 7,8的ElementD。

    原因:

    无法删除ElementA,因为

    someValue != null
    

    无法删除ElementB,因为

    tableA_fk = 3 for element Value2 in tableB 
    

    无法删除ElementC,因为

    someValue != null
    

    可以删除ElementD,因为

    someValue=NULL
    No Element from tableB point to one of this two elements from tableA.
    

    无法删除ElementE,因为

    tableA_fk = 9 for element Value3 in tableB
    

    是否有可能在liquibase脚本中实现类似的东西?

    就像那样

    <changeSet id="remove-elements">
        <delete tableName="tableA">
        <where>ConditionToRemoveTheCorrectELements</where>
        </delete>
    </changeSet>
    

1 个答案:

答案 0 :(得分:0)

我建议您只编写所需的SQL并使用<delete tableName><sql>更改标记,而不是尝试使用<sqlFile>标记。