2


0

一意の列の行間で値を切り替える

このようなテーブルがあるとしましょう。

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

`name`カラムには一意性の制約があります。

どうしたら id = 2`の行を foo`に、 id = 1`の行を bar`に設定できますか?

私はあなたがおそらく単に両方に一時的な名前を割り当てることができ、そして希望する名前で固執することができることを知っています、しかしそれは最も簡単な方法のようには見えません。

私はHibernateを使用しているので、Hibernate固有のトリックはどれでもいいでしょう。 これはすべてのRDBMSに一般的に影響する問題のようです。

2 Answer


5


SQL Serverでは、両方を同時に更新することができます。

UPDATEテーブルSET名= CASE WHEN ID = 1 THAR 'ELSE' foo 'END WHERE ID IN(1、2)


4


`+ SQL Server `と ` Oracle +`では、制約が延期されるため、このクエリを発行するだけです。

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

コメントで示唆されているように、 `+ MySQL +`でこれを使用して順序付けられたリストを維持しているようです(前回この問題が発生しました)。

この場合、より効率的に `+ MySQL +`でそれを行う方法に関する私のブログの一連の記事を読むことをお勧めします。