mysql - 如何更改或交换与一列相关的值?
问题描述
假设我有一个包含两列 x 和 y 的表,没有任何索引或主键 fig:1.0 ,如下所示:
我想更改 y 的值,例如:
x1 = y2
x2 = y1
x3 = y4
x4 = y3
x5 = y6
x6 = y5
模式将是这样的:
输出将如下所示:
如何使用选择查询来做到这一点?如果使用 Select 无法实现,那么如何使用 Update 或 MySQL 中的任何其他方式。
解决方案
这仅在没有重复行的情况下才有效:
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 |
推荐阅读
- django - Django-Beard MP_Node 通过发布请求保存到数据库
- android - 如何显示底部布局下方 50% 和底部布局上方 50% 的视图?
- visual-studio - 如何使 Mac 上的 Visual Studio 在错误行上中断而不是在主类中中断?
- java - 如何更改 html 编码以使用 openhtmltopdf 正确呈现 pdf?
- javascript - 使用 HTML、CSS、Javascript 制作 RPS 游戏的问题
- android - android 通过评级(1-5 星)通过深度链接玩商店
- php - PHP在映射的驱动器目录中创建文件
- c# - 按范围和相同性对 C# 中的列表进行排序
- c++ - 在使用的 cmake 中结合 brew 安装的 apache-arrow。vcpkg 链工具
- github - 返回 UserInfo 时,带有 Airflow 的 GitHub OAuth 引发错误