假设一个表fruits看起来像这样:
fruits
------------------------------------------ | 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号保持不变?
例子:
SWAP ROW WITH ID "5" WITH ROW WITH 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是唯一的
谢谢
您可以使用联接不等式来排列要交换的行:
update fruit a inner join fruit b on a.id <> b.id set a.color = b.color, a.name = b.name, a.calories = b.calories where a.id in (2,5) and b.id in (2,5)
http://sqlfiddle.com/#!18/27318a/5