2013-07-31 75 views
4

目標是運行一個可以在表ID之間交換的MySQL查詢。在行之間交換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' 

這樣的想法是,我想換表格ID 1和2。但是,會發生什麼是第一後查詢所有TableID 1將與TableID 2合併。然後,第二個查詢將更新所有TableID 2(其中包括舊TableID 1和TableID 2)到TableID 1.

最後一個查詢將沒有起訴不存在衝突。但是,如何在這種情況下編寫查詢來交換兩個TableID,而不必將表格全部搞亂(加入)?

回答

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'); 
2

我會使用臨時表。

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

然後更新從臨時表中的原始表。