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

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

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

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

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

Я пытался использовать expectedResult="" и expectedResult="null", но оба не работают.


person siebz0r    schedule 14.01.2013    source источник


Ответы (1)


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

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

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

person Bohemian♦    schedule 14.01.2013
comment
Спасибо, работает на MySQL. Работает ли это с другими базами данных, такими как MSSQL/Oracle/HSQL? - person siebz0r; 14.01.2013
comment
Этот запрос будет работать со всеми базами данных (я составил его таким образом, потому что вы не пометили свой вопрос конкретной базой данных) - person Bohemian♦; 14.01.2013
comment
Супер! Действительно ценю это ;-) - person siebz0r; 15.01.2013