Liquibase предварительное условие для уникального ограничения

Я хочу добавить уникальное ограничение для столбца, используя Liquibase. Конечно, я хочу проверить, существуют ли повторяющиеся строки, используя предварительное условие.

Я придумал это:

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

Однако это производит Empty set на MySQL и, возможно, другие базы данных.

Я пытался с помощью expectedResult="" а также expectedResult="null" но оба не работают.

1 ответ

Решение

Вы всегда можете форсировать результат:

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

Это также позволяет более нормальную группу

Другие вопросы по тегам