如果 1 大于其他,sql 查询交换列

如果第 1 列的数字大于第 2 列的数字,我有 2 列,其中有一个数字我想交换这两列之间的值。


有没有一种简单的方法可以通过查询来做到这一点?


开始:


id | column 1 | column 2

------------------------

1   50         3

2   51         4

结束:


id | column 1 | column 2

------------------------

1   3          50

2   4          51


海绵宝宝撒
浏览 97回答 3
3回答

叮当猫咪

你不能只是交换价值。您需要临时变量第一种方式: UPDATE table_name SET column1=column2, column2=@temp WHERE (@temp:=column1) > column2;第二种方式:这种方式更好,因为它检查任何值是否为 NULLUPDATE table_name SET column1=(@temp:=column1), column1= column2, column2 = @temp WHERE column1 > column2;第二种方式很简单。它比较两个列并在需要时交换这个列。

慕标琳琳

在UPDATE语句中,MySql 在使用更新列的值时使用非标准 SQL 行为,因为在这样的语句中:SET a = x, b = aa赋值中的值b = a不会是表中存储的原始值,而是a赋值后的值a = x。所以这:update tablenameset column1 = column2,    column2 = column1在其他数据库中可以使用的方法在 MySql 中不起作用。有一个不使用变量或不必要的连接的解决方法:update tablenameset column1 = column1 + column2,    column2 = column1 - column2,    column1 = column1 - column2where column1 > column2;从以下开始工作:单表 UPDATE 分配通常从左到右评估。结果:| id  | column1 | column2 || --- | ------- | ------- || 1   | 3       | 50      || 2   | 4       | 51      |

慕斯王

您在表上有一个主键,所以一个简单的选择是join:update t join       t t2       on t.id = t2.id    set t.x = t2.y,         t.y = t2.x    where t.x > t.y;这是一个 db<>fiddle。出于以下几个原因,我更喜欢这种方法而不是使用变量:这不取决于子句的评估顺序set,我认为 MySQL 不能保证这一点。我认为在 MySQL 8+ 中不推荐使用这种变量它不依赖于表达式的顺序,因此更健壮并且更容易适应更复杂的表达式。
打开App,查看更多内容
随时随地看视频慕课网APP