在行之间交换MySQL数据

时间:2013-07-31 23:10:26

标签: mysql sql

目标是运行一个围绕表ID进行交换的MySQL查询。

ID  TableID     Car
1     1        Ford Mustang
2     1        Ford Focus
3     1        Ford Ranger
4     2        Toyota 4runner
5     2        Toyota celica
6     3        Chevy Camaro
7     4        Cadillac Escalade
8     4        Cadillac CTS
9     6        Dodge Charger
10    6        Dodge Ram
11    6        Dodge Caravan

如果我运行这些查询

UPDATE table SET tableid='2' where tableid='1'
UPDATE table SET tableid='1' where tableid='2'
UPDATE table SET tableid='5' where tableid='6'

所以我的想法是我想交换TableID的1和2.然而,会发生什么是在第一次查询之后,所有TableID 1都将与TableID 2合并。然后第二个查询将将所有TableID 2(包括旧的TableID 1和TableID 2)更新为TableID 1。

最后一个查询没有问题,因为没有冲突。但是,如何在没有表格搞乱(加入)的情况下编写查询来交换两个TableID?

2 个答案:

答案 0 :(得分:3)

使用case语句在一个查询中完成所有操作:

UPDATE table
    SET tableid = (case when tableid = '1' then '2' 
                        when tableid = '2' then '1'
                        when tableid = '5' then '6'
                   end)
    where tableid in ('1', '2', '5');

答案 1 :(得分:2)

我会使用临时表。

insert into my_temptable 
(id, newtableid)
select id
, case when tableid = '2' then '1'
etc
end
from originaltable

然后从临时表中更新原始表。