Переключение значений между строками в уникальном столбце - PullRequest
2 голосов
/ 07 августа 2009

Допустим, у вас был такой стол:

id | name
---+---------
1  | foo
2  | bar

Существует ограничение уникальности для столбца name.

Как бы установить строку с id=2 на foo, а строку с id=1 на bar?

Я знаю, что вы могли бы просто назначить временные имена обоим, а затем ввести нужные имена, но это не кажется самым простым способом.

Я использую Hibernate, поэтому любые трюки, специфичные для Hibernate, были бы хороши. Это похоже на проблему, которая затрагивает все РСУБД в целом.

Ответы [ 2 ]

5 голосов
/ 07 августа 2009

В Sql Server вы можете обновить их одновременно:

UPDATE table
SET Name = CASE WHEN ID = 1 THEN 'bar' ELSE 'foo' END
WHERE ID IN ( 1, 2 )
4 голосов
/ 07 августа 2009

В SQL Server и Oracle ограничения откладываются, поэтому вы просто запускаете этот запрос:

UPDATE  mytable
SET     name = CASE name WHEN 'foo' THEN 'bar' ELSE 'foo' END
WHERE   name IN ('foo', 'bar')

Как предлагается в комментариях, кажется, что вы используете это в MySQL для ведения упорядоченного списка (это было в последний раз, когда я столкнулся с этой проблемой).

В этом случае вы можете прочитать серию статей в моем блоге о том, как сделать это в MySQL более эффективно:

...