---
title: "Temptabell!?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/129902-temptabell"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Peeer"
published: "2005-06-13T10:05:00.000Z"
updated: "2005-06-16T08:34:19.000Z"
replies: 5
views: 452
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/129902-temptabell"
---

# Temptabell!?

## #1 — Peeer, 2005-06-13T10:05Z

Hej!
Har en tabell ("info") som innehåller en herrans massa poster. En del av dessa poster (dock långtifrån alla) innehåller data som jag vill ersätta med annan data. Detta löser jag för nuvarande på följande sätt:

```
UPDATE info SET infokolumn = REPLACE(infokolumn, 'prefix_INFO', 'prefix2_NYINFO') WHERE infokolumn LIKE '%prefix_INFO%';
UPDATE info SET infokolumn = REPLACE(infokolumn, 'prefix_INFO2', 'prefix2_NYINFO2') WHERE infokolumn LIKE '%prefix_INFO2%';
UPDATE info SET infokolumn = REPLACE(infokolumn, 'prefix_INFO3', 'prefix2_NYINFO3') WHERE infokolumn LIKE '%prefix_INFO3%';

osv..
```

Detta fullständigt suger musten ur maskinen (konstigt:OO ) så jag letar nu efter alternativa vägar. Min tanke var att jag skulle minska ner mängden data som måste sökas igenom varje gång, genom att först skapa en temporär tabell som innehåller alla poster som innehåller "prefix\_". Denna temporära tabell skulle jag sedan söka igenom på samma sätt som ovan (med replace) för att sedan slå ihop "info" med temptabellen igen. Detta borde väl ge en rätt stor prestandavinst?

Frågan är nu hur jag gör detta? 
1) Kopiera all data som innehåller "%prefix\_%" till "tabell2".
2) Slå ihop "tabell2" och "info" igen och se till så att alla rader i "info" som har samma ID som motsvarande rad i "tabell2" skrivs över.

DBMS: MySQL 4.0

Permalänk: https://www.webforum.nu/p/129902

## #2 — LarsG, 2005-06-13T13:08Z

```
UPDATE info 
SET infokolumn = 
case 
when infokolumn  like '%prefix_INFO3%'
then REPLACE(infokolumn, 'prefix_INFO3',prefix2_NYINFO') 
when infokolumn  like '%prefix_INFO2%'
then REPLACE(infokolumn, 'prefix_INFO2',prefix2_NYINFO') 
when infokolumn  '%prefix_INFO%'
then REPLACE(infokolumn, 'prefix_INFO',prefix2_NYINFO') 
end
WHERE infokolumn LIKE '%prefix_INFO%';
```

Permalänk: https://www.webforum.nu/p/1630116

## #3 — Peeer, 2005-06-13T21:40Z

Hmm, intressant lösning. Fungerar förhoppningsvis bättre än min nuvarande. :)

Permalänk: https://www.webforum.nu/p/1630350

## #4 — Peeer, 2005-06-15T21:12Z

Ja snabbare går det utan tvekan, dock så strular det lite om man har flera satser som ska ersättas i samma post. Den ersätter bara en av dem. Visst går det att köra sql-satsen flera gånger (tills man ser att "affected rows" == 0), men går det att ändra i sql-satsen istället så vore ju det bättre. :)

Permalänk: https://www.webforum.nu/p/1631040

## #5 — LarsG, 2005-06-16T07:14Z

Använd flera replace i så fall

```
replace(
REPLACE(infokolumn, 'prefix_INFO3',prefix2_NYINFO') ,
'anna själv','tredje')
```

tänk även på ordningen mellan olika when

Permalänk: https://www.webforum.nu/p/1631125

## #6 — Peeer, 2005-06-16T08:34Z

Ja så kan man ju göra :) Tackar!

Permalänk: https://www.webforum.nu/p/1631142

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/129902-temptabell
