Liquibase唯一约束条件的前置条件

3

我想使用Liquibase向列添加唯一性约束。当然,我希望使用前提条件检查是否存在重复行。

我想到的实现方式如下:

<preConditions>
    <sqlCheck expectedResult="0">
        select count(*)
        from person
        having ( count(username) > 1 )
    </sqlCheck>
</preConditions>

然而,这会在MySQL和其他数据库上产生空集的结果。

我尝试使用expectedResult=""expectedResult="null",但两者都不起作用。

1个回答

8

你始终可以强制获取结果:

select 
  case when exists(
    select username, count(*)
    from person
    group by username
    having count(*) > 1 )
    then 1
    else 0
  end

这还可以实现更正常的分组/group by和筛选/having操作。

谢谢,适用于MySQL。这个在其他数据库上像MSSQL/Oracle/HSQL上也能用吗? - siebz0r
这个查询语句适用于所有数据库(我这样编写是因为您没有标记特定的数据库)。 - Bohemian
太棒了!真的非常感激;-) - siebz0r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接