2010-05-21 23 views
2

我有一個SQL表(MYSQL 4.0要準確)以下組成:SQL交換字段值

int no (primary) 
int field1 
int field2 

我想與FIELD2的值,反之亦然交換FIELD1的值。

Ex.: 1;2.5;3.76 becomes 1;3.76;2.5 

我需要某種交換臨時變量。但我不認爲我可以在我的更新聲明中使用類似

Set @var1 = field1 

。而且我不認爲改變表格添加臨時列也是我最好的選擇。

+0

你需要做其他任何事情比UPDATE YourTable SET field1 = field2,field2 = field1 – mdma 2010-05-21 14:43:37

+0

我假設你這樣做只有一個列的子集? (否則,您可以重命名列!) 臨時列似乎是最簡單,最直接的解決方案。 – wlangstroth 2010-05-21 14:52:30

+0

@mdma:是的,我需要做別的事情:它不起作用。順便說一句,你的評論應該是一個答案,而不是評論。 – 2010-05-21 15:11:16

回答

2

我發現這個

UPDATE swap_test 
SET x=(@temp:=x), 
    x = y, 
    y = @temp 
WHERE ... 

here與會話變量溶液(有中提供的鏈接,並鏈接回另一這樣問題的其他解決方案)

+0

@沉默,是的,你是對的,在保持答案的多表版本沒有意義,http://dev.mysql.com/doc/refman/5.1/en/update.html上的文檔明確指出行爲沒有定義(儘管我現在出於好奇而運行一些測試) – Unreason 2010-05-21 15:22:48

+0

工程。實現最簡單的答案。謝謝。 – 2010-05-21 15:23:21

2

我最初的想法是要試試這個:

UPDATE YourTable 
    SET field1=field2 
     ,field2=field1 
    WHERE ... 

的SQL Server這裏語法(但在我用過的,我沒有用mysql的每個數據庫的工作這種方式):

declare @x table (field1 int, field2 int) 
insert @x values (1,2) 
update @x set field1=field2, field2=field1 
select * from @x 

輸出

field1  field2 
----------- ----------- 
2   1 

(1 row(s) affected) 

然而一個小小的研究後,我遇到了這個:Swapping column values in MySQL

+0

這不會像預期的那樣工作在mysql中,有一個如此問題的更新行爲的概述,mysql和ather DBMS失敗 – Unreason 2010-05-21 14:47:23

+0

@Unreason,在SQL Srver中工作正常,但在我編輯的答案中看到鏈接。 – 2010-05-21 14:55:20

+0

@KM,它在oracle,postgres,db2中工作,我認爲SQLite的預期。這是mysql和另一個失敗......現在找不到問題。 – Unreason 2010-05-21 15:05:14

2

如何創建工作表,將數據推送到那裏以及與當前表的連接?

+0

+1是一個好主意。 – 2010-05-21 15:19:29