假设一个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 |
------------------------------------------
Run Code Online (Sandbox Code Playgroud)
如何将行的值与另一行交换,使id号保持不变?
例:
SWAP ROW WITH ID "5" WITH ROW WITH ID "2"
Run Code Online (Sandbox Code Playgroud)
结果:
------------------------------------------
| id | name | color | calories |
------------------------------------------
| 1 | apple | red | 20 |
| 2 | plum | purple | 25 |
| 3 | grapes | green | 5 |
| 4 | bananas | yellow | 15 |
| 5 | orange | orange | 10 |
------------------------------------------
Run Code Online (Sandbox Code Playgroud)
请注意,除了id之外,所有值都是完整的.我需要使用一个非常大的值列表来执行此操作,因此我需要一个单行或最多不需要创建临时表的东西,以及类似的东西.
注意:id是唯一的
谢谢
coc*_*lla 13
您可以使用连接不等式来排列要交换的行:
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)
Run Code Online (Sandbox Code Playgroud)
http://sqlfiddle.com/#!18/27318a/5
由于ID是唯一的,因此仅交换ID就很困难,而交换列内容也更容易。这样的查询可能是您需要的:
UPDATE
yourtable t1 INNER JOIN yourtable t2
ON (t1.id, t2.id) IN ((1,5),(5,1))
SET
t1.color = t2.color,
t1.name = t2.name,
t1.calories = t2.calories
Run Code Online (Sandbox Code Playgroud)
请看这里的小提琴。
| 归档时间: |
|
| 查看次数: |
12346 次 |
| 最近记录: |