首页 > 解决方案 > 如何更改或交换与一列相关的值?

问题描述

假设我有一个包含两列 x 和 y 的表,没有任何索引或主键 fig:1.0 ,如下所示:

在此处输入图像描述

我想更改 y 的值,例如:

x1 = y2
x2 = y1
x3 = y4
x4 = y3
x5 = y6
x6 = y5

模式将是这样的:

在此处输入图像描述

输出将如下所示:

输出图像

如何使用选择查询来做到这一点?如果使用 Select 无法实现,那么如何使用 Update 或 MySQL 中的任何其他方式。

标签: mysqlsql

解决方案


这仅在没有重复行的情况下才有效:

update tablename t inner join (
  select 
    (@row_number1:=@row_number1 + 1) num, x, y
  from tablename, (select @row_number1:=0) t
) n  
on n.x = t.x and n.y = t.y
inner join (
  select 
    (@row_number2:=@row_number2 + 1) num, x, y
  from tablename, (select @row_number2:=0) t
) p 
on p.num = case n.num % 2 
  when 1 then n.num + 1 
  when 0 then n.num - 1
end  
set t.y = p.y;

请参阅演示
结果:

| x   | y   |
| --- | --- |
| 11  | 22  |
| 12  | 21  |
| 12  | 24  |
| 14  | 23  |
| 15  | 26  |
| 16  | 25  |

推荐阅读