# Frage: [MySQL] Werte vertauschen...



## brueckspecht (30. September 2004)

Moin Moin,

also ich bin ein ziemlicher Neuling in SQL und hab da mal ne Frage bezüglich eines Querys (Suchfunktion hab ich benutzt, aber nix gescheites gefunden leider):
Nehmen wir an ich hab da ne Tabelle mit 3 Spalten (ID, BildID1, BildID2). Die Inhalte von BildID 1 und BildID2 sollen vertauscht werden. Gibt es nun eine Art switch Funktion mit der ich die Werte tauschen kann? 
Falls nicht würd ich ne 4e Spalte anlegen (BildID_temp meinetwegen) in die ich die Werte der einen Spalte zwischenkopiere um die der ersten dann in die zweite zu kopieren usw...

btw. copy paste geht nicht, ich weiss nicht ob das so üblich ist in SQL Clients, deswegen müsst ich das also als Query formulieren. ;-) 
Danke im voraus.


----------



## imweasel (30. September 2004)

Hi,

wieso benennst du nicht einfach die Spalten um?


----------



## ManicMarble (1. Oktober 2004)

Hallo brueckspecht,
wenn Du den Inhalt der 2 Spalten in der kompletten Tabelle austauschen willst, dann wäre imwheasels Vorschlag sicher der einfachste (MODIFY TABLE...).
Wenn Du allerdings den Austausch nur bei einem Teil der Datensätze vornehmen willst, dann wird's komplizierter. Dein Ansatz mit der "Temp.-Spalte" ist wohl auch prima und funktioniert sicher mit allen Datentypen, sofern die Temp-Spalte den selben Datentyp hat wie die auszutauschenden Spalten:

```
UPDATE tabelle SET tmp=bild1, bild1=bild2, bild2=tmp, tmp=NULL WHERE ...
```
Es geht aber auch ohne zusätzliche Spalte, zumindest wenn die auszutauschenden Inhalte Strings sind:

```
UPDATE tabelle SET
 bild1 = CONCAT(bild1, '~', bild2),
 bild2 = SUBSTRING_INDEX(bild1, '~', 1),
 bild1 = SUBSTRING_INDEX(bild1, '~', -1)
WHERE ...
```
Natürlich muss zur Trennung ein Zeichen gewählt werden, das sicher in beiden Strings nicht vorkommen kann. Und natürlich muss der Datentyp einer Spalte groß genug sind um (zeitweilig) beide Strings plus Trennzeichen aufnehmen zu können.

Gibt bestimmt auch andere Lösungen (gibt's eigentlich immer), das ist nur das was mir als erstes eingefallen ist...

Viele Grüße,
Martin


----------

