2010-05-21 122 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