2013-01-14 10 views
3

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

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

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

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

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

ответ

5

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

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

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

+0

Спасибо, работает на MySQL. Это работает в других базах данных, таких как MSSQL/Oracle/HSQL? – siebz0r

+0

Этот запрос будет работать во всех базах данных (я написал его таким образом, потому что вы не пометили свой вопрос с помощью конкретной базы данных) – Bohemian

+0

Super! Действительно ценю это ;-) – siebz0r