2009-08-07 5 views
2

Angenommen, Sie haben eine Tabelle wie folgt hatte:in einzigartiger Spalte

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

Es gibt eine Einzigartigkeit Einschränkung für die name Spalte.

Wie würden Sie die Zeile mit id=2 zu foo, und die Zeile mit id=1-bar gesetzt?

Ich weiß, Sie könnten wahrscheinlich nur temporäre Namen zu beiden zuweisen dann die gewünschten Namen, aber das scheint nicht wie der einfachste Weg.

Ich verwende Hibernate, also wären alle Hibernate-spezifischen Tricks nett. Dies scheint ein Problem zu sein, das alle RDBMS im Allgemeinen betrifft.

+2

Ich kann nicht helfen, aber fragen, warum Sie würde so etwas brauchen. Willst du eine geordnete Liste führen? Wenn dies der Fall ist, fügen Sie am besten eine separate Spalte "element_index" hinzu. Kannst du erklären, was du versuchst? – ChssPly76

+0

Welches DBMS benutzen Sie? –

Antwort

5

in SQL Server Sie sie beide zur gleichen Zeit aktualisiert werden können:

UPDATE table 
SET Name = CASE WHEN ID = 1 THEN 'bar' ELSE 'foo' END 
WHERE ID IN (1, 2) 
+0

+1, ich dachte nicht, das würde funktionieren, aber ich habe es ausprobiert (erstellt eine Tabelle, Einschränkung, etc) und es funktioniert –

4

In SQL Server und Oracle, Einschränkungen gestundet, das ist, warum Sie gerade diese Abfrage ausführen:

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

Wie vorgeschlagen In Kommentaren scheint es, dass Sie dies in MySQL verwenden, um eine geordnete Liste zu verwalten (das war das letzte Mal, als ich auf dieses Problem stieß).

In diesem Fall Sie möchten die Serie von Artikeln in meinem Blog zu lesen, wie es zu tun in MySQL effizienter:

+0

+1. Hibernate unterstützt die CASE-Anweisung in HQL: http://docs.jboss.org/hibernate/stable/core/reference/en/html/queryhql.html#queryhql-expressions – ChssPly76

Verwandte Themen