目标是运行一个围绕表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?
答案 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
然后从临时表中更新原始表。