Mysql使用虚拟表在行之间交换数据

时间:2013-07-03 03:07:59

标签: mysql sql

假设一个表结果如下:

------------------------------------------
| id |    name    |   color   | calories |
------------------------------------------
| 1  | apple      | red       | 20       |
| 2  | orange     | orange    | 10       |
| 3  | grapes     | green     | 5        |
| 4  | bananas    | yellow    | 15       |
| 5  | plum       | purple    | 25       |
------------------------------------------

如何将行的值与另一行交换,使ID号保持不变?

示例:

ID为“5”的SWAP ROW,行ID为“2”

结果:

------------------------------------------
| id |    name    |   color   | calories |
------------------------------------------
| 1  | apple      | red       | 20       |
| 2  | plum       | purple    | 25       |
| 3  | grapes     | green     | 5        |
| 4  | bananas    | yellow    | 15       |
| 5  | orange     | orange    | 10       |
------------------------------------------

请注意,除了id之外,所有值都是完整的。请注意,这是一个非常大的列表。

注意:id和表的某些值是唯一的。 注意2:在here上发布了一个问题,但它不需要使用虚拟表,因此我希望在表具有除id之外的唯一值时看到解决方案。

谢谢

2 个答案:

答案 0 :(得分:0)

UPDATE fruit a, fruit b  
   SET a.color = b.color,
       a.name = b.name,
       a.calories = b.calories
 WHERE a.id <> b.id 
   AND a.id in (2,5) 
   AND b.id in (2,5);

答案 1 :(得分:0)

以下陈述将有效。

UPDATE fruits SET id=6 where id=2
UPDATE fruits SET id=2 where id=5
UPDATE fruits SET id=5 where id=6